UE4高级运动系统 在Calculate Axis Independent Lag 函数中作者为什么要使用 UnrotateVector 和 UnrotateVector 增加向量值?

Posted Tanzq*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4高级运动系统 在Calculate Axis Independent Lag 函数中作者为什么要使用 UnrotateVector 和 UnrotateVector 增加向量值?相关的知识,希望对你有一定的参考价值。

问题

在Calculate Axis Independent Lag 函数中作者为什么要使用 UnrotateVector 和 UnrotateVector 增加向量值?
不用不行吗?有什么偏差?

【AdvancedLocomotionSystemV】第二篇 C++ 实现镜头跟随人物缓慢移动

解决过程

经过不断询问和学习,终于懂了,非常感谢Up主五谷延年为我解答这个问题。
这里我们要使得CurrentLocation匀速的更新至TargetLocation(世界坐标系下的向量),就要用到LagSpeeds(向量增量),如果直接相加的话会有一些偏差:


在解释这个之前,先看一种情况:
首先在角色蓝图中添加此逻辑:

那么就会有:


箭头一直都在角色前面的这个效果。

现在对蓝图做一些调整:

效果:

UnRotateVector作用是让Vector A绕着原点逆时针旋转 B。
RotateVector作用是让Vector A绕着原点顺时针旋转 B。

知道了这个知识点,那么我们就可以进行探究,为什么能让箭头指向他的前面。

在X轴上加上100.f之后,我们再RotateVector旋转会去,这个时候这个点就会变成在角色的前方100.f的点。

UnrotateVector将世界坐标系变成局部坐标系,再来一次 RotateVector 将 会把局部坐标系变成世界坐标系。
也就实现了将世界坐标增量 ( 100. f , 0. f , 0. f ) (100.f, 0.f, 0.f) 100.f,0.f,0.f变成局部坐标增量值的效果。

现在回到项目示例中,理解起来就会简单很多。
我们想要的效果是局部坐标系下向量CurrentLocation缓慢移动至向量TargetLocation,先将CurrentLocation、TargetLocation 进行UnRotateVector操作,然后添加增值LagSpeed,最后RotateVector,操作实现!

先 RotateVector 后 UnRotateVector 也可以,只不过我们增长的值要设置为负值。

以上是关于UE4高级运动系统 在Calculate Axis Independent Lag 函数中作者为什么要使用 UnrotateVector 和 UnrotateVector 增加向量值?的主要内容,如果未能解决你的问题,请参考以下文章

Niagara真菌运动仿真实现UE4

UE4高级动画系统 ML_DoWhile(TrueFalse) 的含义

ue4的粒子系统怎样恢复初始布局?

UE4材质系统

Unity 的 Quaternion.AngleAxis(angle,axis)实际应用和利用Quaternion.AngleAxis(angle,axis)实现一个物体绕另一个物体做圆周运动

[UE4]武器碰撞