UE4中程序驱动的LookAt动画
来源:互联网 发布:协同网络办公系统 编辑:程序博客网 时间:2024/06/16 09:39
很多游戏中都有, 就是角色转头+眼镜转动盯着一个目标看, 通常是盯着镜头看用的比较多
UE4里实现这个功能很容易, 直接在AnimGraph里使用LookAt结点就可以了
4个LookAt分别控制脖子, 头, 左眼, 右眼的朝向, 脖子和头的角度比眼睛小, 转动速度也比眼睛慢.
实际项目中用的时候, 有个需求是NPC播放一段动画师做的全身动画后, 再盯住玩家, 然后再播, 再盯, 如此循环. 这种情况下, UE4内置的LookAt功能就出问题了.
在播放完动画突然开启LookAt后, NPC会先看向上一次LookAt结束的位置, 然后再转向目标点, 而不是从当前动画的骨骼朝向转过去. 这样就造成了动画的抖动, 很不和谐.
经过分析FAnimNode_LookAt发现, 这个节点是需要一直开着的, 如果出现运行时的开关(Alpha=0), 会导致节点停止Update. 所以这个节点是没考虑当前骨骼的状态的, 每次都是从上一次的LookAt位置开始进行插值.
本着不直接修改引擎代码的考虑, 怎么解决这个问题呢?
1. 首先, 把FAnimNode_LookAt和相应的UAnimGraphNode_LookAt拷贝一份到工程里, 改个名, 这样就可以对其进行修改了
2. 如果需要从当前骨骼的Transform开始进行插值, 那么就需要在Alpha=0(EvaluateBoneTransform停止执行)时对PreviousTargetLocation进行更新, 而EvaluateBoneTransform是不能override的, 已经被父类声明成了final.
3. 在PreUpdate里取出当前动画的Bone Transform, 计算出一个TargetLocation, 这样在刚开始更新时开始进行插值的初始位置就是骨骼朝向的位置了, 也就没有了看向不相干位置的问题
4. 刚切换时还缺个FadeIn/FadeOut的插值动画, 这个我打log看明明是计算了的, 还需要跟进一下看看看为什么骨骼朝向会直接跳到目标点
- UE4中程序驱动的LookAt动画
- ue4中动画通知的几种方式
- ue4中动画通知的几种方式
- UE4中制作高大上的相机动画
- ue4 中动画控制,利用conduit节点
- UE4中动画优化与压缩
- 对UE4动画通知的理解
- Maya模型动画导入UE4的问题
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- java应用正则中Matcher类的matches(),lookAt()和find()的区别
- 17 东北赛总结
- 使用Visual C++进行串口通信编程
- 四种XML解析方式比较
- 部署Tomcat与Nginx负载均衡
- maiadb
- UE4中程序驱动的LookAt动画
- ATMEGA128——初探
- Hadoop1.x中HDFS工作原理
- java的数据类型(基本数据类型)
- Eclipse中将项目导入Tomcat中,并且修改了项目名字,但加载后的项目后面有一个括号显示原来项目的名字
- Educational Codeforces Round 21 A. Lucky Year
- struts2遍历求和
- 《逆向工程核心原理》》<05> 64位&Windows内核6
- Pytorch学习笔记(四)