Marumittu Engineer Blog

個人でゲーム開発を行っています。ゲーム開発に関する情報を紹介するブログ。

UnityでSpineを使ってみた ③アニメーションブレンド

前回の記事でUnityスクリプトからSpineアニメーションを切り替える方法を紹介しました。

今回はアニメーション切り替え時のブレンド設定について紹介していきます。

この記事を書いた時の開発環境は以下の通りです。

 Unity 5.6.0p4
 Spine 3.5.51 Professional

アニメーションブレンド

アニメーションブレンドとは2つ以上のアニメーション間を滑らかに遷移させる事をいいます。アニメーションからアニメーションへの遷移は直前のキーフレームに基づいて補間計算が行われます。
この結果、滑らかにアニメーションが遷移されます。

SpineのUnityランタイムにはアニメーション間の遷移を自動で補間する機能があります。

アニメーションブレンドの設定方法

Projectファイル内にある _SkeletonData を選択しインスペクターを表示します。
Spineでのアニメーションブレンド設定はMix Settingsの項目で行います。

f:id:marumittu_tech:20170615220941g:plain

Default Mix Duration

デフォルトの補間秒数を設定できます。
これは全てのアニメーション遷移で適用される値となります。
但し、個別にアニメーション間の補間設定をした場合はそちらが優先されます。

Add Mix

個別にアニメーション間の補間設定を設定できます。

歩きから走りへ切り替わる時は補間秒数を長めにとったり、
歩きからジャンプへは逆に補間秒数を短くしたりと、
モーションの遷移にメリハリをつける事が可能です。

また、補間秒数に 0 を指定する事でブレンドを無効にする事も可能です。

アニメーションブレンドの設定方法(スクリプト)

Unityスクリプト内でも、デフォルトや個々の補間秒数を指定する事が可能です。

void Start()
{
	AnimationStateData stateData = m_skeletonAnimation.state.Data;
	stateData.defaultMix = 0.25f;
	stateData.SetMix("idle", "damage", 0.1f);
}


この他にも TrackEntry の mixDuration プロパティを操作して補間秒数を指定する事ができるので、ケースバイケースで設定を行うことが可能です。

public void OnDamage()
{
	TrackEntry entry = m_skeletonAnimation.state.SetAnimation(0, "damage", false);
	entry.mixDuration = 0.1f;
}


インスペクター上でも、スクリプト上でも簡単に設定ができるのが嬉しいですね。