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"))
我在 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"))