iku

  • デフォルトアニメーションが設定されていないSkeleton GraphicをHierarchyに表示状態で配置
  • スクリプトの初期化で非表示(GameObjectをSetActiveでfalse)にする
  • 表示するタイミングで表示(GameObjectをSetActiveでtrue)とアニメーションの再生(SkeletonGraphic.AnimationState.SetAnimation)

以上を行うと、そのフレームではアニメーションが再生されずにデフォルト状態が表示され、次のフレームでは呼んだアニメーションの2フレーム目が表示されます。

Skeleton Data Asset の MixSettings の Default Mix Duration は 0 に設定しています。

最初からHierarchyに非表示の状態で配置し、表示するタイミングで表示に切り替えることで呼び出したフレームでアニメーションの1フレーム目が表示されるようになりました。

こちらは仕様として、また解決策として正しいでしょうか?

使用バージョン
Spine : 4.0.59
Unity : 2020.3.19f1
iku
  • 記事: 2

Harald

おそらくスクリプトの実行順序でSetAnimationを呼び出すのが「遅すぎる」のだと思います。つまりそれがSkeletonAnimationスクリプトのUpdate()の後にあることを意味します。 SkeletonAnimation.Update()はアニメーション状態をスケルトンに適用し、 SkeletonRenderer.LateUpdate()は現在のスケルトン状態に基づいてメッシュを生成します。 したがって、適用後にアニメーションを変更してしまうと、次のフレームに表示されることになります。

解決策は、 SetAnimation()の後に skeletonAnimation.Update(0);を呼び出すことです。
-----
Most likely you call SetAnimation "too late" in script execution order, which means after Update() of the SkeletonAnimation script. SkeletonAnimation.Update() applies the animation state to the skeleton, SkeletonRenderer.LateUpdate() then generates the Mesh based on the current skeleton state. So when changing the animation after it has been applied, you will see it in the next frame.

The solution is to call skeletonAnimation.Update(0); after SetAnimation().
アバター
Harald

Harri
  • 記事: 3914

iku

回答ありがとうございます。
SetAnimation()
直後に
Update()
を呼び出したところ、1フレーム目からアニメーションが再生されました。

大変助かりました!ありがとうございます!
iku
  • 記事: 2

Harald

現在、希望どおりに機能していると聞いて、とてもうれしく思います。 お返事ありがとうございます!
Very glad to hear that it's working as desired now. Thanks for getting back to us!
アバター
Harald

Harri
  • 記事: 3914


Return to 日本のSpine ユーザー