unity3d # 160; Physics2D.OverlapAreaNonAlloc奇怪的(bug?)行为与层
本文关键字:bug Physics2D OverlapAreaNonAlloc unity3d | 更新日期: 2023-09-27 18:18:53
我遇到了一个奇怪的bug与物理2d。OverlapAreaNonAlloc,并创建了一个测试项目来确认它。
场景:两个立方体彼此顶部,具有rigidbody2d和box collider,底部一个是运动学的。最上面的是"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"层是另一层,则不检测。
我不明白这个行为,"默认"应该是一个"超级"层,包含所有的层吗?
在调用Physics2D.OverlapAreaNonAlloc()时使用LayerMask.GetMask()
// "Enemy" represents the layer assigned to your enemies
Physics2D.OverlapAreaNonAlloc(pointA, pointB, enemies, LayerMask.GetMask("Enemy"))