OverlapCircleAll没有拾取其他对象

时间:2014-08-21 20:33:37

标签: c# unity3d overlap

我试图让所有物体都在当前物体的距离内。 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);
        }
    }
}

以下是分配给应该拾取的对象的属性:

Female Properties

为什么我的代码没有拿起对象?

1 个答案:

答案 0 :(得分:4)

这个电话:

LayerMask.NameToLayer("ShootAt")

NameToLayer返回一个图层索引(即:7),但OverlapCircleAll需要一个按位层掩码(即:启用第7位)。

在某些情况下,如果图层索引碰巧与所需的图层蒙版有一两个共同点,那么这种事情似乎可行。无论哪种方式,它都会得到不直观且混合的结果。

您可以使用bitwise left shift operator

构建图层蒙版
1 << LayerMask.NameToLayer("ShootAt");

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