Unityのゲーム内で素体を動的に変更したいと思っております。
(例キャラの出撃画面など)
そのため下記のようにスクリプトを作成しました。(かなり簡略化してあります。)
using UnityEngine;
using Spine.Unity;
public class SkeletonChange : MonoBehaviour
{
public SkeletonDataAsset SkeletonDataAsset1;
public SkeletonDataAsset SkeletonDataAsset2;
public bool Change;
void Update()
{
if(Input.GetButtonDown("Fire1")){
if (Change)
{
this.GetComponent<SkeletonAnimation>().skeletonDataAsset = SkeletonDataAsset1;
}
else
{
this.GetComponent<SkeletonAnimation>().skeletonDataAsset = SkeletonDataAsset2;
}
this.GetComponent<SkeletonAnimation>().Skeleton.Skin = null;
this.GetComponent<SkeletonAnimation>().ClearState();
this.GetComponent<SkeletonAnimation>().Initialize(true);
Change = !Change;
}
}
}
上記を実行すると、SkeletonDataAssetの変更タイミングでラグが発生するようです。
変更するスケルトンが12Mのファイルサイズだとラグなく動くのですが、使おうと思っているSpineデータが20Mあり、0.5秒ほどゲームが一時停止してしまい、見栄えが悪くなってしまいます。
上記現象は初回の変更時のみに起きるようで、2回目以降の読み込みなら発生しないようなのです。
また、20Mのファイルが20種類くらいあるので裏で読み込みなどできますと助かります。
(例、「裏でSkeletonDataAssetを事前に非同期で読み込みさせる」等)
こちらのラグの対策方法などありますでしょうか。