keywords:UE4、InverseTransformVector、InverseTransformPosition

实例代码:

//返回摄像机Rotation相对角色Rotation的偏移量Offset
FRotator ASBaseCharacter::GetAimOffsets() const
{
    const FVector AimDirWS = GetBaseAimRotation().Vector();
    const FVector AimDirLS = ActorToWorld().InverseTransformVectorNoScale(AimDirWS);
    const FRotator AimRotLS = AimDirLS.Rotation();

    return AimRotLS;
}

https://github.com/tomlooman/EpicSurvivalGameSeries/blob/4a6ee9a6081529fadbe0f693b2e4e6729d5ec08d/SurvivalGame/Source/SurvivalGame/Private/Player/SBaseCharacter.cpp#L374

如果只是想获取两个Rotation之间的Offset,更简单的办法:

FRotator R1;
FRotator R2;
FRotator Offset = R2 - R1;

但这种直接相减的方式,返回的结果Rotation,度数可能会小于-180 或 大于 180,需要手动处理范围限定,但是效率远高于 InverseTransformVector


无欲则刚,关心则乱。----《论语》