[UE5/Spine] 如何在一張藍(lán)圖中導(dǎo)入多個(gè)Spine角色

前言:
突然有一天,你想在 UE5 里面做一個(gè)可以在正面和背面來(lái)回切換的小人。

你興沖沖地往角色藍(lán)圖里塞了?SpineSkeletonRenderer 和?SpineSkeletonAnimation 各兩個(gè),對(duì)應(yīng)著放進(jìn)了小人的正反面 SpineData。然而 UE5 并沒(méi)有領(lǐng)會(huì)到你想做什么,只是呆呆地把第一個(gè)?SpineSkeletonAnimation 中的小人顯示在了?SpineSkeletonRenderer 上。于是你就上網(wǎng)搜索 “Spine unreal 導(dǎo)入多個(gè)角色” ,然后就找到了這里。
那么,希望這篇文章能夠解決你的疑惑。

版本:
Spine 4.0 latest
Spine-Runtime 4.0
Unreal Engine 5.1
原因分析:
在 Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp 中的 TickComponent() 方法中是這樣寫(xiě)的:
也就是每一 Tick 獲取該組件的 owner 并在上面尋找 USpineSkeletonComponent 類(USpineSkeletonAnimationComponent 的父類)的第一個(gè)組件,導(dǎo)致當(dāng)存在多個(gè)?SpineSkeletonAnimationComponent 時(shí)只會(huì)獲取第一個(gè)組件。

解決方案:
1. 在?SpineSkeletonRendererComponent.h 中新建一個(gè) public 變量
(當(dāng)然你也可以新建 private 變量并通過(guò) Getter() 和 Setter() 獲取和修改)
2. 修改?SpineSkeletonRendererComponent.cpp 中的 Tick() 方法
3. 以 Character 為例,新建 Character 類聲明并初始化 SpineSkeletonAnimationComponent 和?SpineSkeletonRendererComponent
4. 重寫(xiě) PostInitializeComponents() 方法
5. 新建藍(lán)圖,將正反面角色的數(shù)據(jù)放上去看看吧。
注意:?之后要使用 SpineComponent 的類都必須在 PostInitializeComponents() 中指定 SpineSkeletonComponent。
補(bǔ)充:做完第2步之后也許可以在角色藍(lán)圖的 Constructor 里指定?SpineSkeletonRendererComponent 的?SpineSkeletonComponent 為?SpineSkeletonAnimationComponent,不保真(當(dāng)然你得先給 SpineSkeletonComponent 變量加一個(gè) UPROPERTY(BlueprintReadAndWright)?)

尾聲:
根據(jù)你的需求來(lái)設(shè)置正面 Renderer 的 Visibility,比如說(shuō) 明日方舟 里人物朝上則顯示背面隱藏正面,朝下則顯示正面隱藏背面(沒(méi)有說(shuō)明日方舟小人就是我這樣的方法實(shí)現(xiàn)的,Unity 有專屬的對(duì)應(yīng)方法)。
???你還想看紙片人轉(zhuǎn)身怎么實(shí)現(xiàn)啊。也許有空的話下一篇文章會(huì)寫(xiě)吧,算是一個(gè)挺有趣的實(shí)現(xiàn)方法。
以上??See you next mission.
文|NPC
2023/08/08