- 创建ABP_CharacterBase动画蓝图,打开
- 新增Blueprint Thread Safe Update Animation Function方法,细节面板->高级勾选线程安全
- 创建UpdateVelocityData方法,勾选线程安全
其中,WorldVelocity表示角色在世界坐标中的速度向量,WorldRoatation表示角色在世界坐标中的旋转,LocalVelocity表示角色本地的速度向量,如下面输入前后左右时候的数据: 前: WorldRoatation:P=0.000000 Y=94.561111 R=-0.000000 WorldVelocity:X=-47.713 Y=598.100 Z=0.000 LocalVelocity:X=600.000 Y=0.000 Z=0.000 后: WorldRoatation:P=0.000000 Y=94.386131 R=-0.000000 WorldVelocity:X=45.887 Y=-598.243 Z=0.000 LocalVelocity:X=-600.000 Y=-0.000 Z=0.000 左: WorldRoatation:P=0.000000 Y=97.443802 R=-0.000000 WorldVelocity:X=594.935 Y=77.794 Z=0.000 LocalVelocity:X=0.063 Y=-600.000 Z=0.000 右: WorldRoatation:P=0.000000 Y=97.443802 R=-0.000000 WorldVelocity:X=-594.943 Y=-77.732 Z=0.000 LocalVelocity:X=-0.000 Y=600.000 Z=0.000 - 创建UpdateRoationData函数,勾选线程安全
- 创建GetMovementComponet函数,勾选线程安全,纯函数。返回值一定要设置为ReturnValue
- 新建UpdateAccelerationData函数,构选线程安全,与UpdateVelocityData逻辑相同
- 在动画图表中创建Locomotion_SM状态机
- 在Locomotion_SM状态机中添加状态
- 新建动画->动画层接口,命名为ALI_CharacterBase,在右上角动画层中新建4个动画层:FullBody_Idle,FullBody_Start,FullBody_Cycle,FullBody_Stop
- 在ABP_CharacterBase动画蓝图的类设置中,选择ALI_CharacterBase为已实现的接口,在状态机的各个状态中,将相同的动画层输出,如Idle
- 新建ABP_ItemLayersBase动画蓝图,选择ALI_CharacterBase为已实现的接口。用于实现动画的逻辑,如动画的动态切换,动画的距离匹配等
- 在ABP_ItemLayersBase中创建4个变量,类型为动画序列。Idle, Start, Cycle, Stop。在4个动画层中,分别用序列播放器播放动画,其中FullBody_Start,FullBody_Stop要将循环动画取消勾选
- 新建ABP_ItemLayersBase的子类ABP_ItemLayersUnarmed,在右上角添加要使用的动画序列。记得使用的动画需要使用根运动,并强制根锁定
- 在角色蓝图中关联动画层
- 点击运行就可以看到效果了。
|