繁体   English   中英

是否在unity3D中编辑Transform.rotation

[英]Edit or not the Transform.rotation in unity3D

在统一文档中,在Transform.rotation下写入:

请勿尝试编辑/修改旋转。

但是在该示例中,使用赋值之后的几行transform.rotation = ...并且直接设置transform.rotation似乎是日常实践。

但是可以推荐吗? 那么其他属性(例如localRotation )又如何实现rotation属性的设置器,以便也更改localRotation?

transform.rotation的成分不是角度,因此不能作为角度来处理。

正如robertbu在本文中提到的:

许多轮换(很可能是您尝试的轮换)可以通过其他(更简单的)方法来完成,包括'Transform.Roate()'和直接访问'Transform.eulerAngles'-。

Transform.Rotate()-Rotate()进行相对旋转,默认情况下进行局部旋转。

他们不编辑/修改旋转的意思是,旋转是一个统一的内置类,可以处理对象的旋转。 因此,可以像这样随意设置对象的旋转:

Transform.rotation = object.transform.rotation;

但是不建议修改内置的旋转类。

我觉得文档中关于此的措词曾经更加清晰,但这就是它的含义:

我们强烈劝阻编辑transform.rotation 直接对象。 也就是说执行诸如transform.rotation = new Quaternion(0, 100, 15, 1); 除非您真的了解使用四元数的来龙去脉,这要比使用EulerAngles更加困难,因为后者更加人性化和易于理解。

您应该使用的替代方法(这也反映在文档的代码示例中)是Unity提供的用于更改旋转方式的方法。 这些方法将为您解决因改变四元数值而带来的复杂性。

如果我们仔细看看Unity提供的代码示例:

 Quaternion target = Quaternion.Euler(tiltAroundX, 0, tiltAroundZ);
 transform.rotation = Quaternion.Slerp(transform.rotation, target,  Time.deltaTime * smooth);

这里的两个关键因素是target = Quaternion.Euler() ,它采用三个欧拉角(360度标度的角度)并将它们转换为四元数。 另一个是rotation = Quaternion.Slerp() ,它将当前旋转作为四元数,将目标旋转作为四元数并在两者之间进行插值。

请注意,这两个函数都没有从您的侧面“直接”改变transform.rotation ,但是它们都通过了Unity的内部逻辑以转换为适当的四元数。

transform.Rotate这样的方法也是如此。

transform.localRotation基本上与transform.rotation相同。 唯一的区别是,前者表示相对于父级的旋转,而后者表示相对于父级的旋转。

如果要直接编辑对象的旋转,最简单的方法是编辑对象的EulerAngles。 一个例子是:

transform.localEulerAngles = new Vector3(10, 150, 0);

相对于父对象,对象将绕X轴旋转10度,并沿Y轴旋转150度。 使用transform.eulerAngles可以相对于世界旋转它。

请注意,尽管这是解决问题的最简单方法。 Unity确实鼓励使用Quaternions类及其函数来应用旋转,因为使用Euler角会导致发生怪异的效果。

该文档中还讨论了Unity中的旋转和方向 ,并指出(强调我的意思):

四元数可用于表示GameObject的方向或旋转。 该表示法内部包含四个数字(在Unity中称为x,y,z和w), 但是这些数字并不表示角度或轴,因此通常不需要直接访问它们 除非您对四元数的数学特别感兴趣,否则您只真正需要知道四元数表示3D空间中的旋转,并且通常不需要知道或修改x,y和z属性。

Unity使用四元数的原因尤其是,四元数不会受到万向节锁定的影响 ,而eulerAngles会遭受这种损害。 我引用这篇文章:

Unity将所有GameObject旋转内容内部存储为四元数,因为这样做的好处超过了限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM