当我遇到一个奇怪的问题时,我正在尝试Unity3d:
我创建了一个空对象A及其子对象多维数据集B.
A的属性: 位置 - (0,0,0) Rotation-(0,0,0) 横向扩展(1,1,1)
B的属性: 位置 - (0,2,0) Rotation-(0,0,0) 横向扩展(1,4,1)
我制作了一个包含Transform对象的C#脚本。它仅使用transform.localrotation沿z轴旋转。 问题是,如果在Unity编辑器中我将A附加为变换,B似乎沿着其中一个角旋转(我不知道该角是如何选择的)如果我附加B,它似乎沿着它的中心旋转。 我不明白为什么会这样?我知道在localrotation中,会考虑父轮换。但是A和B的初始旋转都是零,所以它无关紧要。
答案 0 :(得分:2)
如果直接修改transform.localRotation
,则表示您正在修改四元数。
通常,您不应直接修改四元数:
Tthey(原文!)基于复数,并且不易直观理解。您几乎从不访问或修改单个Quaternion组件(x,y,z,w);最常见的是你只需要进行现有的旋转(例如从变换中)并使用它们来构造新的旋转(例如,在两次旋转之间平滑插值)。
取自unity3d doc: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