Unity3D Physics2D.OverlapAreaNonAlloc 层的奇怪(错误?)行为

Unity3D Physics2D.OverlapAreaNonAlloc strange (bug?) behaviours with layers

我在 Physics2D.OverlapAreaNonAlloc 遇到了一个奇怪的错误并创建了一个测试项目来确认它。

场景:两个立方体在彼此的顶部,带有 rigidbody2d 和盒子对撞机,底部一个运动学。最上面的是 "Player".

我想用 Physics2D.OverlapAreaNonAlloc 做一些敌人检测,所以我使用了一个看起来像这样的代码,我附在玩家身上:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    Vector2 pointA;
    Vector2 pointB;
    Collider2D[] enemies = new Collider2D[2];

    void Update () {

        //Enemy detection
        pointA = (Vector2)gameObject.transform.position - new Vector2(0.1f, 0f);
        pointB = (Vector2)gameObject.transform.position + new Vector2(0.1f, 0.1f);

        if (Physics2D.OverlapAreaNonAlloc(pointA, pointB, enemies, 9) > 0)
        {
            Debug.Log("first enemy :" + enemies[0].name);
        }
    }
}

9是敌人层数。场景中没有敌人,所以之前的代码永远不会在我的控制台中显示任何东西。可惜...

当我 运行 代码时,会发生以下情况: - 如果 "Player" 图层是默认的,它会被我的 Physics2D.OverlapAreaNonAlloc 以某种方式检测到 - 如果"Player"层是另一层,则不会被检测到。

我不明白这种行为,"default" 应该是包含所有图层的 "super" 图层吗?

在 Physics2D.OverlapAreaNonAlloc() 的调用中使用 LayerMask.GetMask()。

// "Enemy" represents the layer assigned to your enemies
Physics2D.OverlapAreaNonAlloc(pointA, pointB, enemies, LayerMask.GetMask("Enemy"))