【问题标题】:Get Gizmos position in Unity在 Unity 中获取 Gizmo 位置
【发布时间】:2018-05-15 15:50:04
【问题描述】:

我遇到了定义游戏对象中心的问题。在 Unity 中,它给了我一个不在中心的点,但 Gizmo 的位置是正确的。那么也许有人知道如何获取 Gizmos 坐标?

3D模型是由PiXYZ Plugin导入的,所有的部分都乱七八糟的旋转等等。下图中的白色球体显示了gameObject.position找到的所选游戏对象的中心,但不是什么需要。

更新:

现在我发现,枢轴中心点位于错误的位置(通过切换编辑器模式),它来自 NX(CAD 软件),因为模型的对象被变换移动了。我对此无能为力。所以我找到了脚本 - http://wiki.unity3d.com/index.php?title=SetPivot,但它不适用于旋转对象,这对我来说是必不可少的。

所以现在我的问题可能是 - “如何将轴心点移动到视觉对象中心?”。

我尝试过使用层次结构,将空对象添加为父对象等。对本地和全局位置都没有帮助。

【问题讨论】:

    标签: c# unity3d 3d


    【解决方案1】:

    你有几个选择:

    使用renderer.bounds

    任何Renderer 组件都会自动计算它们的轴对齐边界框,您可以使用它来估计对象的视觉中心:

    Vector3 center = GetComponent<Renderer>().bounds.center;
    

    使用collider.bounds

    任何Renderer 组件都会自动计算它们的轴对齐边界框,您可以使用它来估计对象的物理中心:

    Vector3 center = GetComponent<Collider>().collider.bounds.center;
    

    使用变换层次

    场景中的所有内容都根据其Transform 组件进行定位,该组件跟踪世界位置(相对于场景)和本地位置(相对于其父级Transform)。有时将一个 Transform 重新设置为另一个 Transform 的父级很有用,这样更容易操作它们,或者更容易计算它们之间的偏移量。

    根据您的需要,您可以附加一个空游戏对象作为子对象,并使用该游戏对象的位置作为您的指定点。

    使用其他偏移量

    最后,不要忘记您始终可以手动将一些Vector3 偏移量分配给您正在计算的任何位置。这可能是一个笨拙的解决方法,但它在紧要关头有效。

    【讨论】:

    • 查看问题更新。我已经尝试过你提到的东西,但即使你添加了渲染器或碰撞器,它也会进入枢轴中心......
    【解决方案2】:

    您可以创建一个空游戏对象,将其放置在导入模型的中心,然后将导入的模型拖动为空游戏对象的子对象。然后当想要居中位置时,使用刚刚创建的父级。

    【讨论】:

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