【问题标题】:Unity Physics.OverlapBox just doesn't workUnity Physics.OverlapBox 不起作用
【发布时间】:2017-06-01 15:56:47
【问题描述】:

所以有一个问题,每当我使用 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);
}

我的场景设置:

  1. 一个简单的立方体放置在位置(0,0,0),比例为(1,1,1)
  2. 我附加此脚本的空对象

如您所见,我的 OverlapBox 边界比我的立方体大得多,所以它应该找到我的立方体,对吧?嗯,不。我从控制台得到的输出是 0。

还有一件事:如果我在所有轴上将该立方体的比例设置为高于 40,脚本最终会检测到我的立方体并输出 1。

我如何让这个工作,以便脚本可以找到我的默认比例的立方体?

【问题讨论】:

    标签: c# unity3d collision-detection unity5 game-physics


    【解决方案1】:

    我也有同样的问题。我正在使用 TransformVector 来计算我的盒子的大小:

    Vector3 size = itemTransform.TransformVector(itemCollider.size / 2);
    Collider[] results = Physics.OverlapBox(itemTransform.position, size);
    

    结果不一致。我意识到 TransformVector 正在返回大小的负值,所以我只需要 Mathf.Abs 向量:

    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);
    

    【讨论】:

      【解决方案2】:

      根据documentation,您将重叠框的大小设置为-20、-20、-20,这不太符合逻辑。它可以解释为什么您必须将立方体的比例设置为大于 40、40、40 的值。

      另外,物理相关的操作应该在FixedUpdate函数而不是Update函数中处理

      【讨论】:

        猜你喜欢
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多