Unity Physics.OverlapBox 就是行不通
Unity Physics.OverlapBox just doesn't work
所以有一个问题,每当我使用 Physics.OverlapBox 检查该区域中存在多少对象时,它总是输出 0。
这是我的精简代码:
void Update () {
a();
}
void a()
{
Collider[] c = Physics.OverlapBox(new Vector3(10, 10,10), new Vector3(-10, -10, -10));
Debug.Log(c.Length);
}
我的场景设置:
- 一个简单的立方体,放置在位置 (0,0,0),比例为 (1,1,1)
- 我附加此脚本的空对象
如您所见,我的 OverlapBox 边界比我的立方体大得多,所以它应该能找到我的立方体,对吗?好吧,不。我从控制台得到的输出是 0.
还有一件事:如果我将该立方体的比例在所有轴上设置为高于 40,脚本最终会检测到我的立方体并输出 1。
我如何让它工作以便脚本找到我的具有默认比例的立方体?
根据documentation,您将重叠框的大小设置为-20、-20、-20,这不符合逻辑。它可以解释为什么您必须将立方体的比例设置为大于 40、40、40 的值。
此外,与物理相关的操作应该在 FixedUpdate
函数中处理,而不是 Update
一个
我遇到了同样的问题。我正在使用 TransformVector 来计算我的盒子的大小:
Vector3 size = itemTransform.TransformVector(itemCollider.size / 2);
Collider[] results = Physics.OverlapBox(itemTransform.position, size);
结果不一致。我意识到 TransformVector 正在返回尺寸的负值,所以我只需要 Mathf.Abs the Vector:
Vector3 size = itemTransform.TransformVector(itemCollider.size / 2);
size.x = Mathf.Abs(size.x);
size.y = Mathf.Abs(size.y);
size.z = Mathf.Abs(size.z);
Collider[] results = Physics.OverlapBox(itemTransform.position, size);
所以有一个问题,每当我使用 Physics.OverlapBox 检查该区域中存在多少对象时,它总是输出 0。
这是我的精简代码:
void Update () {
a();
}
void a()
{
Collider[] c = Physics.OverlapBox(new Vector3(10, 10,10), new Vector3(-10, -10, -10));
Debug.Log(c.Length);
}
我的场景设置:
- 一个简单的立方体,放置在位置 (0,0,0),比例为 (1,1,1)
- 我附加此脚本的空对象
如您所见,我的 OverlapBox 边界比我的立方体大得多,所以它应该能找到我的立方体,对吗?好吧,不。我从控制台得到的输出是 0.
还有一件事:如果我将该立方体的比例在所有轴上设置为高于 40,脚本最终会检测到我的立方体并输出 1。
我如何让它工作以便脚本找到我的具有默认比例的立方体?
根据documentation,您将重叠框的大小设置为-20、-20、-20,这不符合逻辑。它可以解释为什么您必须将立方体的比例设置为大于 40、40、40 的值。
此外,与物理相关的操作应该在 FixedUpdate
函数中处理,而不是 Update
一个
我遇到了同样的问题。我正在使用 TransformVector 来计算我的盒子的大小:
Vector3 size = itemTransform.TransformVector(itemCollider.size / 2);
Collider[] results = Physics.OverlapBox(itemTransform.position, size);
结果不一致。我意识到 TransformVector 正在返回尺寸的负值,所以我只需要 Mathf.Abs the Vector:
Vector3 size = itemTransform.TransformVector(itemCollider.size / 2);
size.x = Mathf.Abs(size.x);
size.y = Mathf.Abs(size.y);
size.z = Mathf.Abs(size.z);
Collider[] results = Physics.OverlapBox(itemTransform.position, size);