我面临着定义gameObject中心的问题。在Unity中,它给了我一个不在中心的点,但Gizmos的位置正确。那么也许有人知道如何获得Gizmos坐标?
3D模型由PiXYZ插件导入,所有部件都被不同的旋转混乱等。下图中的白色球体显示了gameObject.position找到的所选游戏对象的中心,但它不是什么需要。
现在我发现,枢轴中心点位于错误的位置(通过切换编辑器模式),它来自NX(CAD软件),因为模型的对象是通过变换移动的。我无能为力。所以我找到了脚本 - http://wiki.unity3d.com/index.php?title=SetPivot,但它对旋转的对象效果不佳,在我看来这是必不可少的。
所以现在我的问题可能是 - "如何将轴心点移动到视觉对象中心?"。
我试图使用层次结构,添加空对象作为父母等。对本地和全球职位都没有帮助。
答案 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的子对象。然后,当想要中心位置时,使用您刚刚创建的父级。