1

当我遇到一个奇怪的问题时,我正在尝试 Unity3d:

我创建了一个空对象 A 及其子对象立方体 B。

A 的属性:位置-(0,0,0) 旋转-(0,0,0) 比例-(1,1,1)

B的属性:位置-(0,2,0)旋转-(0,0,0)比例-(1,4,1)

我制作了一个具有 Transform 对象的 C# 脚本。它仅沿 z 轴使用 transform.localrotation 旋转。问题是,如果在 Unity 编辑器中我将 A 附加为变换,B 似乎沿着它的一个角旋转(我不知道那个角是如何选择的),如果我附加 B,它似乎沿着它的中心旋转。我不明白为什么会这样?我知道在局部旋转中,考虑了父旋转。但是 A 和 B 的初始旋转都为零,所以没关系。

4

1 回答 1

2

如果你transform.localRotation直接修改,你正在修改一个四元数。

通常你不应该直接修改四元数:

它们(原文如此!)基于复数,不容易直观地理解。您几乎从不访问或修改单个四元数组件(x、y、z、w);大多数情况下,您只需获取现有的旋转(例如来自变换)并使用它们来构建新的旋转(例如在两个旋转之间平滑插值)。

取自 unity3d 文档:http ://docs.unity3d.com/Documentation/ScriptReference/Quaternion.html

尝试使用transform.Rotate()transform.localEulerAngles。那应该可以解决您的问题。

http://docs.unity3d.com/Documentation/ScriptReference/Transform-localEulerAngles.html http://docs.unity3d.com/Documentation/ScriptReference/Transform.Rotate.html

于 2013-08-08T18:59:54.043 回答