[玩转UE4/UE5动画系统>应用篇>功能模块] 之 布娃娃系统(ALS V4实现方案详解)
本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。...
本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。
教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。
教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。
工程文件: 玩转UE4(GitHub)
0. 效果演示
[玩转UE4/UE5动画系统>应用篇>功能模块] 之 布娃娃系统(ALS V4实现方案详解)
文章目录
1. 概述
ALS V4的布娃娃系统(Ragdoll System或Ragdoll系统)实现的重点和难点并不在于Ragdoll本身,而是当Ragdoll恢复到原始状态时,需要有一个合理的恢复过程,其中包括:
- 合理的起身动画:一般来说角色落地以后会有面朝上和面朝下两种可能,对于这两种可能要采取不同的恢复动画。
- 合理的位置:进入Ragdoll状态以后,角色模型受物理系统控制会偏离角色自身位置。因此,在Ragdoll状态时,需要不断更新角色位置,使其跟随Ragdoll。
Ragdoll系统工作流程图如下。
2. 核心函数
- RagdollStart:负责进入布娃娃状态时的初始化设置。
- RagdollUpdate:更新布娃娃的状态,最重要的是使角色的位置跟随布娃娃的位置。
- RagdollEnd:退出布娃娃状态,播放角色的起身蒙太奇动画,并恢复初始设置。
2.1 RagdollStart
注释
布娃娃状态关键就是开启物理骨骼的模拟,这时需要把角色自身的物理关闭。
2.2 RagdollUpdate
注释
更新角色的位置,使其跟随Ragdoll位置。
2.3 RagdollEnd
注释
ALS V4的实现非常严谨,考虑到了,如果Ragdoll是在下落过程中恢复到非Ragdoll状态,那么落地之前应该恢复到下落状态。
到此为止,角色的骨骼动画一直由物理系统支配,但是后面播放起身动画蒙太奇的时候,需要一个合理的初始姿态,因此在这里使用了Save Snapshot
节点,目的是保存一个当前角色骨骼的姿态,这个姿态会在后面蓝图中用到。
注意:如果发现角色恢复站立以后,方向是倾斜甚至是倒立的,请查看物理骨骼的设置,确保Root骨骼添加了碰撞体,并且被设置为
Kinematic
。
2.4 GetGetUpAnimation
2.5 SetActorLocationDuringRagdoll
注释
将角色位置设置到Ragdoll位置。
各个参数的物理意义如下图(两个Offset Z的值相等)
3. 动画蓝图
3.1 动画状态机
注:动画蓝图部分,我做了简化,在保留ALS V4的Ragdoll核心逻辑的基础上,去除了无关的逻辑部分。
注意:起身动画依然是使用蒙太奇实现。
在Ragdoll状态机中,由两个状态:
- Ragdoll Out Pose:这里就调用了刚才保存的Snapshot。
- In Ragdoll:播放角色的下落动画,这个状态主要是装饰性的,使Ragdoll的过渡更自然。
3.2 动画事件图
动画事件图中的Update Ragdoll Values
方法就是通过Ragdoll的速度,更新In Ragdoll状态中下落动画的播放速率。也属于一个装饰性的功能。
4. 状态控制
4.1 Movement Mode
CharacterMovement
的Movement Mode
标志位的切换比较简单
- 在
RagdollStart
中切换到None
。 - 在
RagdollEnd
中切换回Walking
或Falling
。
4.2 Movement State
- 在
RagdollStart
中切换到Ragdoll
。 - 通过
Character
的自身事件OnMovementModeChange
切换回其它状态。
4.3 Movement Action
Movement Action
的状态切换都是在NotifyState中进行的。
注:在ALS V4中
Movement Action
的作用主要是标记蒙太奇动画行为,当动画未执行完毕时,阻止用户输入,从而防止角色出现滑动现象。
5. 小结
Ragdoll系统(ALS V4实现方案)就介绍完毕了,另外还有一些实现细节,由于篇幅的原因就不在本文中解释了,再次建议大家结合我提供的项目学习。如果只想在项目中实现Ragdoll系统,而不想使用ALS V4,大家可以把附带的工程直接移植到自己的项目中。
再次感谢ALS V4的作者为我们提供了优秀的ALS V4,它不仅是强大的插件工程,同时也是绝佳的学习资料!同时也感谢Epic的慷慨,让每一个虚幻开发者都能够免费享受到这样的实惠!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)