在Unity中获得Gizmos的位置

时间:2018-05-15 15:50:05

标签: c# unity3d 3d

我面临着定义gameObject中心的问题。在Unity中,它给了我一个不在中心的点,但Gizmos的位置正确。那么也许有人知道如何获得Gizmos坐标?

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

enter image description here

UPD:

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

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

我试图使用层次结构,添加空对象作为父母等。对本地和全球职位都没有帮助。

Here is the same part, but Gizmos now are in the pivot

2 个答案:

答案 0 :(得分:1)

您有几个选择:

使用renderer.bounds

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

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

使用collider.bounds

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

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

使用转换层次结构

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

根据您的需要,可以将空GameObject作为子项附加,并使用该GameObject的位置作为指定点。

使用其他偏移量

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

答案 1 :(得分:0)

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

相关问题