Keywords:单位向量、方向向量、unit vector

获取某方向上的单位向量

使用场景:

  1. 比如你需要做一些平滑计算的时候,那么可能会用到DeltaSeconds,该向量与DeltaSeconds运算时,希望该向量始终保持恒定,那么,可以将该向量Normalize。
  2. 想获得两个点之间的单位向量,一般把该单位向量当作 MovementComponent 的方向。

与之对应的两种蓝图方式:

1,Get Direction Vector

2,Normalize

C++ 方式:蓝图节点 Normalize 对应的 C++ 接口是 FVector::GetSafeNormal(),而不是FVector::Normalize()。前者是返回一个单位向量,但不会修改当前向量;后者不返回任何值,但是会修改当前向量为单位向量。

FVector::Rotation()对应的蓝图节点
void GetYawPitchFromVector(FVector InVec, float& Yaw, float& Pitch);

然后使用输出参数 Yaw, Pitch 创建一个 Rotator,并将 Roll 设置为0,即等价于FVector::Rotation()

为什么将Vector转换为Rotator时,计算方式中需要将Roll值为零?因为FVector::Rotation()计算使用的坐标系为偏航轴 (Aircraft principal axes) 将一个向量从初始朝向(假设为(1.f, 0.f, 0.f)),调整为目标朝向时(假设为(1.f, 1.f, 1.f)),偏航轴的变换规则是:Pitch轴变换和Yaw轴依次变换,Roll轴不需要变换,因为Roll轴就是向量方向自身。

FVector::Rotation()计算使用的坐标系为偏航轴 (Aircraft principal axes),但是UE4场景中使用的Rotation的Pitch、Roll和偏航轴中的Pitch、Roll是相反的:FRotator.Pitch对应偏航轴的Roll。如果需要FVector::Rotation()的结果传给UE4场景中的Actor,对应的Pitch和Roll需要交叉替换。


低级的欲望通过放纵就可以得到,高级的欲望需要克制才能获得。-网络