[UE5/Spine] 如何在一张蓝图中导入多个Spine角色
前言:
突然有一天,你想在 UE5 里面做一个可以在正面和背面来回切换的小人。

你兴冲冲地往角色蓝图里塞了 SpineSkeletonRenderer 和 SpineSkeletonAnimation 各两个,对应着放进了小人的正反面 SpineData。然而 UE5 并没有领会到你想做什么,只是呆呆地把第一个 SpineSkeletonAnimation 中的小人显示在了 SpineSkeletonRenderer 上。于是你就上网搜索 “Spine unreal 导入多个角色” ,然后就找到了这里。
那么,希望这篇文章能够解决你的疑惑。

版本:
Spine 4.0 latest
Spine-Runtime 4.0
Unreal Engine 5.1
原因分析:
在 Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp 中的 TickComponent() 方法中是这样写的:
也就是每一 Tick 获取该组件的 owner 并在上面寻找 USpineSkeletonComponent 类(USpineSkeletonAnimationComponent 的父类)的第一个组件,导致当存在多个 SpineSkeletonAnimationComponent 时只会获取第一个组件。

解决方案:
1. 在 SpineSkeletonRendererComponent.h 中新建一个 public 变量
(当然你也可以新建 private 变量并通过 Getter() 和 Setter() 获取和修改)
2. 修改 SpineSkeletonRendererComponent.cpp 中的 Tick() 方法
3. 以 Character 为例,新建 Character 类声明并初始化 SpineSkeletonAnimationComponent 和 SpineSkeletonRendererComponent
4. 重写 PostInitializeComponents() 方法
5. 新建蓝图,将正反面角色的数据放上去看看吧。
注意: 之后要使用 SpineComponent 的类都必须在 PostInitializeComponents() 中指定 SpineSkeletonComponent。
补充:做完第2步之后也许可以在角色蓝图的 Constructor 里指定 SpineSkeletonRendererComponent 的 SpineSkeletonComponent 为 SpineSkeletonAnimationComponent,不保真(当然你得先给 SpineSkeletonComponent 变量加一个 UPROPERTY(BlueprintReadAndWright) )

尾声:
根据你的需求来设置正面 Renderer 的 Visibility,比如说 明日方舟 里人物朝上则显示背面隐藏正面,朝下则显示正面隐藏背面(没有说明日方舟小人就是我这样的方法实现的,Unity 有专属的对应方法)。
啊?你还想看纸片人转身怎么实现啊。也许有空的话下一篇文章会写吧,算是一个挺有趣的实现方法。
以上 See you next mission.
文|NPC
2023/08/08

