【问题标题】:How to detect a potential collision in Unity?如何检测 Unity 中的潜在碰撞?
【发布时间】:2021-05-17 18:10:45
【问题描述】:

我有一个作为业余爱好的 Unity 游戏,并且遇到了一个有趣的问题,即如何最好地处理碰撞检测。我的问题是我的游戏是一个 2D 回合制游戏,游戏对象每次可以在非基于网格的世界空间中移动固定距离。我的游戏对象当前使用 BoxCollider2D 来处理碰撞检测,但我需要能够确定在实际移动之前是否会发生碰撞,这现在会导致游戏对象与另一个游戏对象重叠并触发 OnCollisionEnter2D 事件.这里的最终想法是允许玩家计划移动并在对象旁边显示“导航指南”,以根据游戏对象的移动能力显示移动选项。

是否可以使用我的游戏对象的对撞机,转换其位置以移动或旋转它,看看是否会发生碰撞,但实际上不移动对象本身?

【问题讨论】:

    标签: unity3d collision-detection


    【解决方案1】:

    您的意思是简单地使用 Rigidbody.SweepTest ? ;)

    测试刚体是否会与任何物体发生碰撞,如果它被在场景中移动。

    来自示例

    public class ExampleClass : MonoBehaviour 
    {
        public float collisionCheckDistance;
        public bool aboutToCollide;
        public float distanceToCollision;
        public Rigidbody rb;
    
        void Start()
        {
            rb = GetComponent<Rigidbody>();
        }
    
        void Update()
        {
            RaycastHit hit;
            if (rb.SweepTest(transform.forward, out hit, collisionCheckDistance))
            {
                aboutToCollide = true;
                distanceToCollision = hit.distance;
            }
        }
    }
    

    哦,刚刚注意到实际上这仅适用于 3D 刚体。

    对于 2D,这不存在,但可以使用 Collider2D.Cast 进行复制

    从 Collider 位置开始将 Collider 形状投射到场景中,忽略 Collider 本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多