首页 > 解决方案 > Unity 5.6 2D-如何检查2个对撞机是否没有接触任何其他对撞机?

问题描述

在 Unity 5.6 C# 中,我知道有一种方法可以通过使用 IsTouching 来检查碰撞器是否被任何其他碰撞器接触。

但是,我想知道如何将两个对撞机组合在一起(相互接触),以及如何检查它们是否都在相互接触任何对撞机。

标签: c#unity3d2d

解决方案


我会用我在评论中提到的想法来试一试(我发现只有评论部分很难理解)。

我将使用碰撞列表并在此处存储任何触摸,使用OnCollisionEnterand过滤掉“伙伴”碰撞器OnCollisionExit

由于两者都附加到同一个游戏对象,因此很容易过滤它们:

public class Collisions : MonoBehaviour
{
    // Show in the Inspector for debug
    [SerializeField] private List<Collider> colliderList = new List<Collider>();

    public bool IsTouching => colliderList.Count != 0;

    private void Awake ()
    {
        // Make sure list is empty at start
        colliderList.Clear();
    }

    private void OnCollisionEnter(Collision collision)
    {
        // Filter out own collider
        if(collision.gameObject == gameObject) return;

        if(!colliderList.Contains(collision.collider) colliderList.Add(collision.collider);
    }

    private void OnCollisionExit(Collision collision)
    {
        // Filter out own collider
        if(collision.gameObject == gameObject) return;

        if(colliderList.Contains(collision.collider) colliderList.Remove(collision.collider);
    }
}

在智能手机上打字,但我希望这个想法很清楚


推荐阅读