2016-01-20 60 views
0

我有一个我正在开发的Unity游戏。目前它处于基本状态,但目标是以图形方式稍微复制旧式telnet MUD的游戏玩法。这一阶段的地图构建是手动的,不是自动的,尽管计划在以后进行。我可以很容易地将房间放置在一个2维网格中,每个网格在x和y轴上彼此相距很远。 我处于几个“Room”游戏对象的阶段,他们每个人都有一个C#脚本(让我们称之为“a_room.cs”脚本)。每个脚本都有一个公共gameObject变量,用于该特定“房间”的北部,南部,东部和西部房间。Unity c#寻找近房的房间

我的问题;有没有办法让每个“房间”在运行时或编辑中都自己指出哪个“房间”最接近每个特定的基本方向?考虑到某个方向上可能有几个房间,只有最接近的房间,以及这个方向上可能没有房间?

我不一定需要代码作为答案,逻辑和重要功能是我所追求的。

另外;如果这种思想方法存在明显的错误,那么可以考虑其他建议。

+1

你可以用任意标签标记每个房间(现在让我们说“房间”),然后使用[this](http://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag。 html)来获取所有房间的列表,然后从那里找到每个方向上最近房间的简单数学。 – Taelsin

+0

谢谢Taelsin,我将在下面的答案中使用它。 – Marky

回答

0

您可以拥有包含所有这些a_room对象的全局列表。

理想情况下,您可以在实例化房间本身时进行N/S/E/W分配。例如:在创建R1之后,R2会创建到R1的东边,并且也会被指定为R1的EastRoom。另外,由于房间与下一个房间(水平或垂直)隔开一定距离,所以您可以搜索列表以查看哪些房间放置在某个房间的相邻位置。例如:如果已知R1位于(x,y)的位置,则搜索全局列表以查找位置为(x + n,y)并将其指定为R1的EastRoom的房间;房间在(x-n,y)作为R1的WestRoom等。

我希望有帮助!

0

如果游戏对象已经被装箱,那么你可以在它们的位置(x,y,z)按顺序将它们排列在列表中,只要将N,S,E,O设置为列表...