我正在3D环境中实现A *算法,我已经到了一个点,我需要确定在特定坐标的平面上是否有某些东西(我的角色将在其上行走)。
我创建了一个类Board
,它保存Nodes
的地图(每个都保存其坐标的中心)。所以我们可以说我已经将飞机离散化为像棋盘一样类似的东西。现在我需要知道每个Node
上是否有东西在这个平面上创建一个可步行/不可行走的地图。
如何在Unity3D中执行此操作? Raycasting?
修改
有一件事我能想到,但我觉得它有点低效:
创建一个临时对撞机(取Board
的区域和一些高度)并检查是否有某些东西与它发生碰撞,然后继续为Board
中的每个图块进行翻译。
你认为这会是一个好方法吗?
答案 0 :(得分:1)
您可以使用每个节点坐标的光线投射(Physics.Raycast)。确保您要检查的对象有碰撞器。这只会检查单个点,但不会检查节点的整个区域。
要检查每个节点上方的区域,而不仅仅是一个点,您可以使用球体或胶囊投射或检查。请参阅Physics的类函数列表中的选项。
另一种方法是在场景中的每个节点上使用具有适当形状的触发器对撞机的游戏对象。您可以通过在脚本的OnTriggerEnter和OnTriggerExit方法(即MonoBehaviour子类)中递增和递减计数器来跟踪每个节点上有多少其他对象(带有碰撞器)。
答案 1 :(得分:0)
感谢Ghopper21的回答,我想出了每个Node
来自它的ShpereCasting,例如Node (0,0,0)
将从(0,100,0)
进行Spherecasted。