UnityのAnimatorの状態にタグを設定し条件を簡単にする

記事内に広告が含まれています。

UnityのAnimatorControllerでは立っている状態、歩いている状態、攻撃している状態などを作成し、条件によって遷移をさせるという事が出来ます。

そして、スクリプトでAnimatorの状態を取得し、今キャラクターを移動させてもいいのか?攻撃してもいいのか?といったアクションを起こす事はよくあります。

Unityのアニメーションの切り替えシステムとスクリプト
Unityのアニメーションの切り替えシステムであるAnimatorControllerの設定とスクリプトからアニメーションを制御していきます。

ですが、例えばキャラクターが連続攻撃を出来るようにした場合は最初の攻撃、2番目の攻撃、3番目の攻撃と3つの状態を作成します。

Unityのアクションゲームで連続攻撃を実現する方法
Unityのアクションゲームで連続攻撃が出来る機能を作成します。現在攻撃中の時に攻撃ボタンを押したら次の攻撃アニメーションが再生されるようにします

攻撃中にキャラクターを移動させたくない場合はAnimatorの状態が最初の攻撃、2番目の攻撃、3番目の攻撃の状態にいない時という条件が必要です。

さらにジャンプ中にも移動が出来ないという条件を加えると、

スクリプトの条件には↑のようにAnimatorの状態をたくさん記述する必要が出てきます。

攻撃の状態が3パターンだけならまだいいですが、攻撃パターンが色々増えてくると全部記述するだけでスクリプトの可読性が落ちますし、単純に面倒臭いのもあるので、これを解消しましょう。

スポンサーリンク

AnimatorControllerのTagを設定する

複数の似たような条件を一括で扱うのはそんなに難しい事はしません。

AnimatorControllerの状態を選択してインスペクタを表示しTagを設定するだけです。

Animatorの状態にタグを設定

↑のようにAttack1状態があったとしたらTagにAttackを設定します。

他の攻撃状態でAttack2、Attack3があれば全てAttackというタグを設定しておきます。

これで攻撃状態の時はこのAttackタグというのを使って攻撃状態かどうかを判断すればいい事になります。

つまり先ほどのスクリプトを変更し、

という条件だけで攻撃中という事がわかるようになります。

↑のスクリプトではタグ名で条件判定していますが、ハッシュ値を生成して比較する事も出来ます。

ハッシュ値をStringToHash(“タグ名”)を使って生成しておき、そのハッシュ値とAnimatorの現在の状態のハッシュ値を比較します。

終わりに

AnimatorのTagを設定して使うという基本的な事を今までしてなかったんですが・・・・(^_^;)

スクリプトの読みやすさ等を考えるとやっておくと便利ですね。

うむ・・・・久しぶりにめちゃくちゃ短い記事になった。

タイトルとURLをコピーしました