2020年5月28日

Tips & Tricks —— 跨骨架共享动画蓝图

作者 EGC Support Team

在实际项目中,开发者有时希望不同的骨架间共享同一套动画蓝图,尤其是状态机的重用,从而实现动画转换逻辑的统一的配置。实际运行时仍然使用骨架对应的动画资源。例如不同种类怪物的动画状态机共享。

引擎中的动画蓝图是与骨架绑定的,无法直接跨骨骼应用;这里给出一个简单的蓝图使用小技巧来实现动画蓝图的共享。
unnamed.gif
示例工程:
下载链接:https://pan.baidu.com/s/1FIWdNvgcYakajbTqJE89LA
适用版本:引擎版本 4.22.2 or later

示例说明:
1. 打开项目,地图中有两个角色,一个Mixamo_Goblin,一个IggyScorch_Phoenix角色;使用不同骨骼及模型,但共用了同一个动画蓝图(Mixamo_AnimBP_Parent)中的设置。
2. 运行游戏;可以控制IggyScorch_Phoenix跑跳攻击等;它的动画蓝图(IggyScorch_Phoenix_AnimBP)继承父级的动画蓝图(Mixamo_AnimBP_Parent);角色资产被替换成自己Skeleton对应的动画资产。
3. 调整修改Mixamo_AnimBP_Parent,再次运行游戏查看父级的动画蓝图的修改对IggyScorch_Phoenix角色的影响。

制作说明:
  • 不同角色需继承自相同Character蓝图,保证操作以及传入动画蓝图的变量相同。
  • 基础动画蓝图的Animation Sequence Object Reference需要使用Pin创建变量,以便在被继承后可以替换动画。
  • 为其中一套骨架创建新的动画蓝图, Parent 指定为基础动画蓝图,并替换掉变量中指定的动画资源。
1.png 2.png
  • 动画资源仅可使用当前骨架相关联的资源;无法使用基础动画蓝图关联的资源;如果要使用基础动画蓝图关联的骨骼的动画资源需要对其做复制并且Retarget操作
  • 状态Transition的逻辑需要改成比例相关(Get Relevant Anim Time Remaining Fraction),而不是时间相关,因为被替代后动画长度有可能不同
  • 在当前子动画蓝图无法再增加额外的动画逻辑;需要的话可以加在角色的Postprocess 动画蓝图中,比如物理动画。或者再创建一个动画蓝图,并使用Sub Anim Instance指定当前子动画蓝图为Instance Class,从而扩展混合逻辑。
  • 父级动画蓝图不要有基于特定骨骼的修改,否则继承后丢失骨骼信息出错。
  • 在Python文件夹里提供了一个示例,该脚本根据指定的Parent Anim Blueprint 和 Child Skeleton 来生成Child Anim Blueprint,同时根据设定的命名规则来替换来对应的Anim Asset。