【Unity2D】スクリプトによるアニメーション遷移の制御

Unity2D

Unity2D ARPG

こんにちは。なおキーヌです。

ブログ毎日更新は313日目になります。

前回「【Unity2D】移動時のアニメーターコントローラーを設定しよう:準備編」にてアニメーターとアニメーションの違いを知りました。

今回はスクリプトでアニメーションからアニメーションの遷移を制御する方法を覚えましょう。

ガッツリやってしまうと結構頭がこんがらがるのでシンプルに伝えようと思います。

基本的にやることはアニメーターコントローラー変数によってアニメーションを切り替えられるので
あとはスクリプト側でその変数を操作することで自由にアニメーションを遷移させることが出来ます。

Unity2DでARPG作成、第6回目始めましょう。

  1. アニメーターで変数を作ろう
  2. アニメーターで条件分岐を作ろう
  3. スクリプトからアニメーターの変数を弄ろう

アニメーターで変数を作ろう

アニメーターのタブを押して画面を開いて、通常であれば左側に変数を作る項目があります。

+を押すと

  • Float
  • Int
  • Bool
  • Trigger

上記3つはプログラミングの変数の型そのままの認識でOKです。

ちょっと特殊なのが「Trigger」

今回INTで管理していくので使う時になったら説明します。

知りたい人は各自ググってみてください。

とりあえずINTの変数を作りましょう。

移動アニメーションを切り替える変数なので「nowWalk」とでも名付けましょうか。

初期値は0で大丈夫です。

アニメーターで条件分岐を作ろう

現状、下向き歩きアニメーションしかないのでパパっと横向きアニメーションを作ってしまいます。

毎度言いますが、ドット絵は各自用意してください。

なければ32×32で分割した画像で違いが分かるものならなんでも大丈夫です。

アニメーションを作り終わったらD&Dでアニメーターに移してEntryから右クリックして
「MakeTransition」で作ったアニメーションへの遷移を作ります。

Entryとアニメーションの間に出来たら矢印をクリックすると、
インスペクタの一番したに「Conditions」という項目があるので+ボタンを押すと条件を決めることができます。

ここで「Equals」を条件に選択すると「if hoge == 0」 と同じような処理になります。

例えば「nowWalk」が0の時遷移する。

という感じですね。

スクリプトからアニメーターの変数を弄ろう

それではスクリプトでどうやって弄るか見てみましょう。

弄るにはアニメーターコントローラーを取得しないといけません。

    Animator animator;

    int nowAnim = 0;

まずはアニメーターを格納するクラス変数を作っておきます。

そしてアニメーター側で作ったnowWalkはINT型でしたので、
スクリプト側でも管理するためにINT変数を作っておきます。

次にスクリプトがアタッチされているオブジェクトのアニメーターを取得します。

  Start() {
    animator = GetComponent<Animator>();
  }

Start関数はUnity側で用意されている起動時に実行される関数です。

基本的な関数については公式をよく見てください。

これで起動時にアタッチされているアニメーターを取得できました。

次に何かボタンを押したときに呼ばれる関数を作っておいて
以下の処理を実行すればアニメーターの変数を変更できます。

  animator.SetInteger("nowWalk",nowAnim);

Start関数で呼び出しても大丈夫です。

確認のためにnowAnim変数を1にしたり0にしたりして
アニメーター側で切り替わっていることを確認すれば後は状況に合わせて数値をセットすれば好きにアニメーションを変更できます。

次回はこれを使って実際にアニメーションを切り替えるスクリプトを作っていきましょう。

今回は座学的な感じなのでここまでにしておきましょう。

それでは。