问题
场景里有两个相同角色被绑定。角色的localScale.X乘以-1,出现在屏幕右侧,并保留其它正标度。这是确保旋转180度不会使它们面对摄像机相反的一边。当我检查transform.eulerAngle时,发现在Unity5.4和5.3中返回了不同的值。
原因
Unity 5.3和5.4之间有进入转型系统的多重修复,这样引起了一些在Unity5.3被破坏的功能之上所构建的两个版本之间迁移的问题。例如,当一个物体成为scale为负数的GameObject的父元素,就出现不正确旋转的行为。当子对象(下面gif中的立方体)使用全局旋转时,会出现反向旋转。(5.4以上版本已经修复了)。
Unity 5.3也报告了未考虑负scale的父对象的Transform.rotation的问题。如果父对象没有负scale,会使Transform.rotation出现相同数值(如下图)。在Unity5.4(以及更新的版本),物体对象的Transform.rotation会考虑它自己和父对象的任何负数缩放。所以,在5.3和5.4以上使用transform.eulerAngles,你就会得到不同的结果。
解决方案
如果希望还生成Unity 5.3相同的结果,那么在Unity5.4或以上版本调用transform.eulerAngles时,可以使用本文附加的脚本代码:
1.RotationFix.cs会更新m_LocalEulerAnglesHint,需要将产生的正确旋转数值显示在编辑器Inspector视图。
2. RotationTools.cs包含用来要求eulerAngles和5.3的值相匹配的静态功能。所以你得到像以前使用的transform.eulerAngles的eulerAngles数值,那么就调用RotationTools.GetRotationWith53Behaviour(transform).eulerAngles。
更多信息
此内容适用的版本是Unity 5.4或以上。
- RotationTools.cs(878 Bytes)
- RotationFix.cs(1 KB)