我遇到了Physics2D.OverlapAreaNonAlloc的一个奇怪的错误,并创建了一个测试项目来确认它。
场景:两个立方体在彼此的顶部,带有rigidbody2d和盒子对撞机,底部有一个运动学。最上面一个是“玩家”。
我想使用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 - 如果“播放器”图层是另一个图层,则不会检测到它。
我不明白这种行为,“默认”应该是一个包含所有图层的“超级”图层吗?
答案 0 :(得分:0)
在对Physics2D.OverlapAreaNonAlloc()的调用中使用LayerMask.GetMask()。
// "Enemy" represents the layer assigned to your enemies
Physics2D.OverlapAreaNonAlloc(pointA, pointB, enemies, LayerMask.GetMask("Enemy"))