坐标空间转换
使用引擎提供的函数
通过 Rotate Vector / Unrotate Vector 转换坐标空间,该方法内部是通过旋转矩阵对向量进行变换
与旋转相关的一些计算
在UE中,一个Actor的旋转通常是指它的Forward方向即X坐标轴(世界坐标)对应的Rotation或Rotator
由向量获取旋转
Make Rot from X
将输入向量当作矩阵中第一列即X坐标轴来构建旋转矩阵,其余两个坐标轴由X轴叉乘而来,再使用 RotMatrix.Rotator 来返回矩阵中X坐标轴即Forward方向对应的Rotator值,该方法内部主要通过对X坐标轴使用Atan2方法求得Pitch,Yaw,Roll
Make Rot from Z
将输入向量当作矩阵中第三列即Z坐标轴来构建旋转矩阵,使用 RotMatrix.Rotator 方法任然是返回Forward方向所对应的Rotator值
Rotation from X Vector
该方法要求输入X坐标轴的向量,然后直接通过Atan2返回对应的Rotator值,省去了构建矩阵这个步骤,因为由前面 Make Rot from X 节点可知对构建的矩阵调用 RotMatrix.Rotator 方法任然是对X坐标轴使用 Atan2 来求值,所以这也是该方法与 Make Rot from X 获取结果是一样的原因
获取到玩家的旋转值并面向玩家
*旋转一个向量, *
另外 Rotate Vector Around Axis 节点也可以按角度旋转向量
旋转的叠加
两个 Rotator 可使用 Combine Rotators 方法叠加旋转
两个 Quat 可通过相乘叠加
对 Quat 四元数的简单理解:四元数的数值构成了一个旋转轴向量 q 与旋转角度 a,一个四元数代表了一个旋转过程,即绕旋转轴 q 旋转角度 a 。两个四元数相乘与顺序相关,表示将右边的四元数代表的旋转叠加到左边的旋转上
旋转的差值
使用 Delta Rotator 获取两个 Rotator 之间的差值
通过乘以反四元数获取两个 Quat 之间的差值
有时候需要求出旋转的差值而不是旋转的绝对值,如将动画中的骨骼旋转增加额外的旋转使其对齐到新的目标等
示例,求出自身到目标方向向量的旋转值与自身旋转值的差值后,加到自身的旋转上使对齐到目标
使用四元数的版本(示例只是表示可以这样计算,并不是最佳方式)
直接通过两个向量也可以得出 Quat 差值
与角度相关的计算
求单个向量在坐标系上的角度值
求两个向量之间的夹角角度值,使用 Dot 与 ACos 计算
通过到目标方向的向量与本身旋转计算夹角度数