关注

Unity 5.4与5.3相比,Transform.EulerAngles返回了不同的值

问题

场景里有两个相同角色被绑定。角色的localScale.X乘以-1,出现在屏幕右侧,并保留其它正标度。这是确保旋转180度不会使它们面对摄像机相反的一边。当我检查transform.eulerAngle时,发现在Unity5.4和5.3中返回了不同的值。

原因

Unity 5.3和5.4之间有进入转型系统的多重修复,这样引起了一些在Unity5.3被破坏的功能之上所构建的两个版本之间迁移的问题。例如,当一个物体成为scale为负数的GameObject的父元素,就出现不正确旋转的行为。当子对象(下面gif中的立方体)使用全局旋转时,会出现反向旋转。(5.4以上版本已经修复了)。

 

 Rotate5.3.gif

 

 Unity 5.3也报告了未考虑负scale的父对象的Transform.rotation的问题。如果父对象没有负scale,会使Transform.rotation出现相同数值(如下图)。在Unity5.4(以及更新的版本),物体对象的Transform.rotation会考虑它自己和父对象的任何负数缩放。所以,在5.3和5.4以上使用transform.eulerAngles,你就会得到不同的结果。

 

Rotations.jpg

 

解决方案

如果希望还生成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或以上。

 

 

这篇文章有帮助吗?
1 人中有 1 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。