gpt4 book ai didi

c# - OverlapCircleAll 没有拾取其他对象

转载 作者:太空狗 更新时间:2023-10-30 01:18:50 25 4
gpt4 key购买 nike

我试图让所有对象都在当前对象的距离内。 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

为什么我的代码没有拾取对象?

最佳答案

这个调用:

LayerMask.NameToLayer("ShootAt")

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

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

您可以使用 bitwise left shift operator 构建图层蒙版:

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

(您可以使用按位或添加额外的层。)

关于c# - OverlapCircleAll 没有拾取其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com