UnityのアニメーターコントローラーのStateMachineBehaviourでアニメを制御する

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

今回は通常のスクリプトからアニメーションの状態を確認して、アニメーションを制御するのではなく、UnityのアニメーターコントローラーにStateMachineBehaviour(スクリプト)を追加し、アニメーターコントローラー側のスクリプトでアニメーション制御をします。

前回まではキャラクター移動スクリプトでキャラクターが今どの状態かを制御していろいろな処理をしていました。

歩いているアニメーションが終了した時に何らかの処理をしたい!と思った時に今どのアニメーションが再生されているか?という情報をスクリプトから取得する必要がありました。

これでうまく制御出来れば問題ないですが、スクリプトを書くのが結構大変です。

そこでアニメーションコントローラーのStateMachineBehaviourを使って、アニメーションの状態と遷移がどうなっているかをアニメーションコントローラー側で管理し、そこでしたい処理を加えるという風にしてみます。

では作ってみましょう。

スポンサーリンク

Behaviourを作成して設定する

まずはBehaviourを作成して設定してみます。

アバター6

Animator ControllerのWalk等の状態を選択し、インスペクタを表示します。

Add Behaviourをクリックし、スクリプトを作成します。今回はEndWalkにしました。

スクリプトはデフォルトでいくつか記述されておりコメント化してあります。

今回は歩くアニメーションが終了した時にDebug.Logを使って「アニメーションが終了」という表示をしてみます。

EndWalkのコメントにしてあるoverride public void OnStateExitをコメントを外して使います。

OnStateExitはアニメーションの再生が終わると呼び出されるので歩くアニメーションの終了と同時に「アニメーションが終了」という文字がコンソールに表示されます。

StateMachineBehaviourを使う利点

アニメーションの再生が始まった時や終わった時などに何らかの処理をしたいという時はかなり便利です。

フィールドはpublicや[SerializeField]アトリビュートを指定すれば取得出来ます。

アニメーターに関する制御は引数としてAnimatorを受け取っているので、歩くアニメーションが終了したら、『アニメーションパラメータの値を変更する』というような時は簡単に出来ます。

アニメーターコントローラーでアニメーション途中で別のアニメーションへと遷移させると通常のスクリプトで『アニメーションが終了したら』という条件を書くのが結構面倒になったりうまく判定できなくなります。

そんな時にStateMachineBehaviourを使うとアニメーターコントローラーの状態に取り付けその状態での判断が可能なので条件漏れを防ぐことが出来ます。

終わりに

これでAnimatorControllerのStateMachineBehaviourでアニメーションを制御する事が出来るようになりました。

今回は実のある使い方はしてませんが・・・・、

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

↑の記事でBehaviourを実践的に使ってみました。

次回からバイオハザード風のガンシューティングの機能を作っていきたいと思います。

パソコン用のコントローラーを持っていないので、キーボードで操作出来るように無理やりやってみます。(`´)

おそらくやる事がたくさんあるので1回の記事では終了しないかと思われます。(^。^)

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