我正在3D环境中实现A*算法,我已经到了一个点,我需要确定是否有东西躺在平面上(我的角色将在其上行走)在特定的坐标。
我已经创建了一个类Board
,它持有Nodes
的映射(每个持有其坐标的中心)。所以我们可以说我把平面离散成类似棋盘的东西。现在我需要知道每个Node
上是否有一些东西可以在这个平面上创建一个可行走/不可行走的地图。
我如何在Unity3D中做到这一点?Raycasting ?
编辑
我能想到一件事,但我认为它有点低效:
创建一个临时碰撞器(取Board
的tile的面积和一些高度),检查是否有东西与它碰撞,然后继续为Board
中的每个tile转换它。
你认为这是个好办法吗?
你可以使用每个节点坐标的光线投射(Physics.Raycast)。确保你正在检查的对象有碰撞器。但是,这将只检查单个点,而不是检查节点的整个区域。
要检查每个节点上方的一个区域,而不仅仅是一个点,您可以使用球体或胶囊投射或检查。参见物理类函数列表中的选项。
另一种方法是在场景中的每个节点上设置带有适当形状的触发碰撞器的游戏对象。你可以通过增加和减少脚本(即MonoBehaviour子类)的OnTriggerEnter和OnTriggerExit方法中的计数器来跟踪每个节点上有多少其他对象(带有碰撞器)。
多亏了Ghopper21的回答,我从上面提出了ShpereCasting每个Node
,例如Node (0,0,0)
将从(0,100,0)
spherecasting。