Lyra的动画蓝图解决方案

Lyra的动画化系统是UE5正式版附赠的官方demo,在此记录一下我的总结。

具体的细节这里就不粘贴了,知乎几个链接讲的比我好

https://zhuanlan.zhihu.com/p/517368184

https://zhuanlan.zhihu.com/p/654430436

https://zhuanlan.zhihu.com/p/659775897

简而言之

角色蓝图负责操作逻辑

ABP_XXX_Base负责动画后期(物理特效,骨骼分层,状态机)

ABP_ItemAnimLayerBase负责处理动画过程处理中的精细数据(例如delta yaw,pitch等),所有状态机具体动画播放的逻辑(步幅适配,距离匹配等),与ABP_Base依靠属性存取和动画层接口链接

ALI_ItemAnimLayers 负责定义前两个动画蓝图之间的接口

原则上,这两个ABP是不允许使用事件图表的,但是实际上使用也没出现什么致命错误,在处理一些属性存取处理不了的变量时可以使用事件图表

由于属性存取的特性,不允许在属性存取中读取角色主蓝图的变量,这会导致引擎构建时在角色蓝图未初始化完成前读取动画蓝图,从而导致崩溃

https://forums.unrealengine.com/t/getting-assertion-failed-indirection-function-getreturnproperty-when-running-the-game-in-editor-for-the-first-time-after-complicing-a-specific-blueprint/1777656

但是直接从owning actor获取移动组件却是官方推荐的做法,可能官方对于数据和逻辑的解耦有自己的想法罢

动画蓝图的数据存储由ABP_XX_AL完成,不同的武器用不同的蓝图链接,在主蓝图的初始化中使用Link Anim Class Layers节点进行链接

Lyra将角色的瞄准状态切换,蹲起切换均放在gametag中管理,这些tag会变成动画蓝图的Is XXing?变量,在ItemLayerBase蓝图中的动画选择(序列求值器或者播放器的初始化函数)中使用。

在这个框架下,想要在Lyra的基础上添加新的动画内容,需要:

  1. 在ABP_XXX_Base中添加状态机(前提是需要)
  2. 如果需要精细的动画控制,则在ALI中添加所需的动画层接口
  3. 在ABP_XXX_Base中将状态机的输入链接刚才创建的动画层
  4. 在ABP_ItemLayerBase中实现具体的动画播放逻辑
  5. 创建动画层蓝图,作为存储层存放动画

这一套生产逻辑主要适用于想要在角色基础移动上创新的场景(例如,我希望给角色添加三层不同速度和动画的冲刺状态,而且还要有距离适配和方向适配!)在绝大多数情况下,Lyra本身的状态机就已经够用了(前提是你有对应的动画)

Proudly powered by WordPress | Theme: Nomad Blog by Crimson Themes.