Unity 5.6 2D-如何检查2个对撞机是否没有碰到任何其他对撞机?

时间:2019-12-21 20:18:16

标签: c# unity3d 2d

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

但是,我想知道如何将两个碰撞器(彼此接触)组合在一起,以及如何检查两个碰撞器是否彼此接触。

1 个答案:

答案 0 :(得分:1)

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

我将使用碰撞列表并在此处存储所有触摸,并使用OnCollisionEnterOnCollisionExit过滤掉“伙伴”对撞机。

由于两个都附着在同一个GameObject上,因此很容易对其进行过滤:

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

在智能手机上输入文字,但我希望这个想法能弄清楚

相关问题