C# 当“打印(变换.旋转);”时,这些数字代表什么是统一执行的吗?

C# 当“打印(变换.旋转);”时,这些数字代表什么是统一执行的吗?,c#,unity3d,C#,Unity3d,当我执行行print(transform.rotation)时命令屏幕上会出现如下消息: (-0.4,-0.9,0.0,0.0) UnityEngine.MonoBehavior:打印(对象) FireballActive:Start()(位于Assets/Scripts/Folder/Script.cs:14) 我感兴趣的是括号中的4个数字是什么,以及如何在像transform.rotation.x这样的代码中处理它们。每个数字代表什么?它们是一个数字的字段。将旋转转换为角度轴时,其中三个数字

当我执行行
print(transform.rotation)时命令屏幕上会出现如下消息:

(-0.4,-0.9,0.0,0.0)
UnityEngine.MonoBehavior:打印(对象)
FireballActive:Start()(位于Assets/Scripts/Folder/Script.cs:14)

我感兴趣的是括号中的4个数字是什么,以及如何在像
transform.rotation.x
这样的代码中处理它们。每个数字代表什么?

它们是一个数字的字段。将旋转转换为角度轴时,其中三个数字是按该角度一半的正弦缩放的轴。第四个是角的一半的余弦

听起来太复杂了吗?别担心,是的!你不应该去transform.rotation.x
任何时候。我认为这是Unity API的设计缺陷之一。用户界面中有x、y和z的“旋转”,您希望能够说
transform.rotation.x
来访问它。您在UI中看到的实际上更接近于
transform.eulerAngles.x

虽然四元数非常有用,但是通过
四元数
类中定义的方法,而不是通过访问它们的
x
y
z
w
字段

以下是要点

  • 切勿访问
    四元数的单个元素(不要执行
    transform.rotation.x
  • 使用四元数作为对象。不要担心它实际上包含了什么,担心它代表了什么(“我正在寻找的是这个旋转”)。如果您真的想修补它们,请将它们转换为对您有意义的内容(
    q.eulerAngles
    Quaternion.toangelaxis(q)
    ,等等)

    • 例如,两个零表示球如何旋转。倾斜,角度,如果有意义的话?球可以旋转经度,高度(现在0会使球旋转,看起来好像它脱离平衡),它会摇摆,很容易让你犯很多错误。它还需要更多的内存。我被告知将其保留为默认:

      浮动x; 无效更新(){


      由于四元数对于像我这样的非数学家来说有点复杂,我将尝试解释我对它们的简单非数学理解。在unity transform中,旋转返回四元数。四元数是4D向量。我认为它们是3D角度。四元数基本上描述了如果你拿一个对象,在应用在四元数中。在unity中,四元数很有用,如果您想缓存一个旋转,以后可以应用或添加,可以从中减去另一个旋转。但请记住,使用四元数a+b不同于b+a。如果您只对角度值感兴趣,则可以使用transform.eulerAngles。请使用API:=>
          x += Time.deltaTime * 10;
          transform.rotation = Quaternion.Euler(x,0,0);
      
      }