【问题标题】:Unity3d - check for collision on non moving objectsUnity3d - 检查非移动物体的碰撞
【发布时间】:2014-04-02 21:25:50
【问题描述】:

我有一个由多个对象构建的球体。我想要做的是当我触摸/单击一个对象时,该对象应该找到所有附属对象。但是因为它们都没有移动,所以不能使用碰撞检测。

即使碰撞器确实相互碰撞,我也无法找到检测这些附加对象的方法,正如我在场景中看到的那样。我尝试了所有的可能性,但没有一个能起作用,因为没有物体在移动。

有没有办法检查手动碰撞检测,或者有什么方法可以让 Unity3d 自动进行碰撞检测?

【问题讨论】:

  • Physics.OverlapSphere 能满足您的需求吗?
  • 也许您可以发布您的代码或/和场景图像。它可能就像使用 OnCollisionStay 而不是 OnCollisionEnter 一样简单,但是没有具体信息就无法判断
  • Physics.RaycastPhysics.RaycastAll 也可能有帮助。

标签: unity3d collision-detection


【解决方案1】:

您可以保留所有这些对象的列表,然后当您的事件发生时,您可以向所有对象发送消息以执行您希望他们执行的操作。

假设您希望您的球体分裂成小块。您向球体发送Force 消息。然后,您使用牛顿运动定律并找出每个部件的速度。请记住,速度是一个向量,因此它有方向。


这就是我会做的事情,并且仍然对我的游戏/模拟中发生的事情保持适当的控制。记住F = ma

【讨论】:

    【解决方案2】:

    您可以使用 RaycastHit (http://docs.unity3d.com/Documentation/ScriptReference/RaycastHit.html) 进行碰撞,这也适用于非移动物体,但需要更高的性能

    【讨论】:

      【解决方案3】:

      您可以为每个对象添加刚体;当你触摸其中一个时,给它一个力,它就会移动并触发相邻对象的事件。

      由于您不想移动您触摸的对象,您可以在 OnCollider 或 OnTrigger 事件处理函数中取消移动。

      【讨论】:

        【解决方案4】:

        我设法通过检查与所选对象和属于球体的所有其他对象的距离来解决此问题。如果距离低于某个值,则为附属对象。

        虽然这肯定不是万无一失的,但到目前为止它没有问题。 对不起,我不够清楚。感谢您的所有建议。

        【讨论】:

        • 距离检查发生了多少次?如果您的代码中经常发生这种情况,我不会推荐它。
        • 它只发生一次,当我点击球体的一个部分时。所以在性能方面,这种方式不是问题。
        猜你喜欢
        • 2011-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        • 2023-03-13
        相关资源
        最近更新 更多