我试图让所有物体都在当前物体的距离内。 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);
}
}
}
以下是分配给应该拾取的对象的属性:
为什么我的代码没有拿起对象?
答案 0 :(得分:4)
这个电话:
LayerMask.NameToLayer("ShootAt")
NameToLayer返回一个图层索引(即:7),但OverlapCircleAll需要一个按位层掩码(即:启用第7位)。
在某些情况下,如果图层索引碰巧与所需的图层蒙版有一两个共同点,那么这种事情似乎可行。无论哪种方式,它都会得到不直观且混合的结果。
您可以使用bitwise left shift operator:
构建图层蒙版1 << LayerMask.NameToLayer("ShootAt");
(您可以使用按位OR添加其他图层。)