Unity 5.6 2D-如何检查 2 个对撞机是否未接触任何其他对撞机?

Unity 5.6 2D- How can I check if 2 colliders isn't touching any other collider?

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

但是,我想知道如何将两个碰撞器组合在一起(相互接触),以及如何检查它们是否都接触到彼此之外的任何碰撞器。

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

我会使用碰撞列表并在此处存储任何接触,使用 OnCollisionEnter and OnCollisionExit.

过滤掉 "partner" 碰撞器

因为两者都附加到同一个游戏对象,所以很容易过滤它们:

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);
    }
}

在智能手机上打字,但我希望思路清晰