[UE4] FVector 向量相关
Keywords:单位向量、方向向量、unit vector
获取某方向上的单位向量
使用场景:
- 比如你需要做一些平滑计算的时候,那么可能会用到DeltaSeconds,该向量与DeltaSeconds运算时,希望该向量始终保持恒定,那么,可以将该向量Normalize。
- 想获得两个点之间的单位向量,一般把该单位向量当作 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需要交叉替换。
低级的欲望通过放纵就可以得到,高级的欲望需要克制才能获得。-网络