栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号