在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 也可以,只不过我们增长的值要设置为负值。



