【问题标题】:How to determine if there is an object lying on the Plane at particular coordinates?如何确定在特定坐标的平面上是否有物体?
【发布时间】:2012-12-11 21:43:42
【问题描述】:

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

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

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

编辑

有一件事我能想到但我觉得效率有点低:

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

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

【问题讨论】:

    标签: c# unity3d game-physics


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      感谢Ghopper21 的回答,我想出了ShpereCasting 从上面的每个Node,例如Node (0,0,0) 将从 (0,100,0) 进行 Spherecast。

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2015-06-10
        • 1970-01-01
        相关资源
        最近更新 更多