OverlapCircleAll没有检测到其他物体。

4

我正在尝试获取当前对象附近距离内的所有对象。 maxShootDistance 设置为 3,但是当属于 ShootAt 层的对象接近或进入圆形区域时,它们从未被捕获,我的调试输出显示为 0。为什么其他对象没有被捕获?

public class QuckShot : Gun {

    void Start () {
        StartCoroutine(shoot());
    }

    IEnumerator shoot(){
        while(true){
            Collider2D[] hitColliders = Physics2D.OverlapCircleAll(transform.position, maxShootDistance, LayerMask.NameToLayer("ShootAt"));
            Debug.Log(hitColliders.Length); // This is always returning zero
            /*
             * Snipped other bits of code
             */
            yield return new WaitForSeconds(shootSpeed);
        }
    }
}

以下是应该被拾取对象所分配的属性: 女性属性 为什么我的代码没有拾取到这个对象?
1个回答

5

这个调用:

LayerMask.NameToLayer("ShootAt")

NameToLayer 返回一个层级索引(例如:7),但是OverlapCircleAll 需要一个按位进行操作的层级掩码(即:启用了第 7 个位)。

在某些情况下,如果层级索引恰好与所需的层级掩码具有一两个位,则这种方法可能看起来有效。但无论如何,它都会产生令人费解和混乱的结果。

您可以使用按位左移运算符构造层级掩码:

1 << LayerMask.NameToLayer("ShootAt");

(您可以使用按位或添加其他层。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接