3

我正在 3D 环境中实现 A* 算法,我已经到了需要确定在特定坐标的平面上(我的角色将在其上行走)上是否有东西的地步。

我创建了一个类Board,它包含的地图Nodes(每个都包含其坐标的中心)。所以我们可以说我已经将平面离散化为类似棋盘的东西。现在我需要知道每个人是否有东西Node可以在这架飞机上创建一个可步行/不可步行的地图。

如何在 Unity3D 中做到这一点?光线投射?

编辑

我能想到一件事,但我认为这有点低效:

创建一个临时对撞机(获取Boardtile 的区域和一些高度)并检查是否有东西与它发生碰撞,然后继续为Board.

你认为这会是一个好方法吗?

4

2 回答 2

1

您可以使用来自每个节点坐标的光线投射( Physics.Raycast )。确保您正在检查的对象有碰撞器。这只会检查单个点,但不会检查节点的整个区域。

要检查每个节点上方的区域,而不仅仅是一个点,您可以使用球体或胶囊投射或检查。请参阅Physics的类函数列表中的选项。

另一种方法是在场景中的每个节点上都有一个带有适当形状的触发器碰撞器的游戏对象。您可以通过递增和递减脚本的OnTriggerEnterOnTriggerExit方法(即 MonoBehaviour 子类)中的计数器来跟踪每个节点上有多少其他对象(带有碰撞器)。

于 2012-12-26T13:12:31.890 回答
0

多亏了Ghopper21Node的回答,我从上面提出了 ShpereCasting 每个,例如Node (0,0,0)从 Spherecasted (0,100,0)

于 2012-12-26T17:15:24.960 回答