初めに
複数のアニメーションを管理するAnimatorの使い方をまとめます。
Index
- 初めに
- Index
- Animationの作り方
- Animatorの作成
- Animatorウィンドウを見てみよう
- Animatorを使って、アニメーションを遷移させよう
- キャラクターを動かしてみる
- 実行して確認してみよう
- 最後に
Animatorの作成
Spriteをスライスし、ドラッグ&ドロップする方法でAnimatorとAnimation Clipを作成することができます。(上のAnimationの作り方にあるリンク先をご覧ください)
また、次のようにしてもAnimatorを作ることができます。
- Assets内で右クリック→Create→Animator Controllerをクリックする
Animatorウィンドウを見てみよう
Window→Animation→AnimatorをクリックするとAnimatorウィンドウを開くことができます。
Animatorウィンドウは下の画像のようなものになっています。
Entry, Any State, Exitと書かれた3つのStateがあることが分かります。Stateとは状態を意味します。今回はアニメーションの状態、つまり、歩行、ジャンプなどどのアニメーションをするかを表す要素です。おそらく、難しいことは考えず、使ってみればどのようなものか分かってきます。詳しいことは下のリンク先に公式の説明がありますので、そちらをご覧ください。
docs.unity3d.com
Entry, Any State, Exitは初めから用意されているStateになり、それぞれ役割があります。
Entry
Entryは最初にアニメーションの遷移がスタートするStateです。アニメーションの最初に設定したい動作はこのEntryから遷移させるようにしましょう。
Any State
Any Stateはどの状態からでも好きな状態に遷移できるStateです。
Exit
Exitに遷移すると最初のEntryに戻ります。
Animatorを使って、アニメーションを遷移させよう
実際にAnimatorを使ってアニメーションを遷移させてみましょう。
- Animation Clipを作り、Animatorにドラッグ&ドロップする
これでアニメーションのStateがAnimatorに追加されます。この記事では、Idel、Walk、JumpのAnimation Clipを追加しました。
オレンジ色のStateはデフォルトのState、つまり最初に起動されたときのStateです。変更するときは、Stateを右クリックし、Set as Layer Default Stateをクリックします。
- Stateを右クリックし、Transitionを設定する
アニメーションの遷移の仕方を設定します。Stateを右クリックし、Make Transitionをクリックします。そして、遷移させたいStateへ矢印を結びます。Idleは立ちアニメーションなので、Default Stateにします。Walk、Jumpはいつでも遷移できるようにAny Stateから矢印を結んでおきます。
- Parameterを設定する
Parametersをクリックし、+をクリックします。すると、追加するParameterを選択することができます。
スクリプトからアニメーションを遷移させるときに、Animatorを使うのですが、その際に必要なParameterを設定することができます。Parameterは次の4つになります。
Parameter | 説明 |
---|---|
Int | 整数 |
Float | 小数部分をもつ数値 |
Bool | true, falseの値 |
Trigger | 遷移によって消費されたときコントローラーによってリセットされる boolean パラメーター |
この記事では、Walk、JumpというBoolのParameterを追加しています。
- 矢印をクリックし、それぞれの遷移の仕方を設定する
矢印をクリックすると、Inspectorに次のような画面が現れます。ここで遷移の仕方を設定します。
例えば、Any StateからJumpへの遷移の場合、次のように設定します。
大まかな役割は次の通りです。
Has Exit Time | 遷移条件を時間で指定する項目 |
---|---|
Conditions | 遷移条件を論理式で指定する |
Jumpをするタイミングですぐにジャンプのアニメーションに遷移してほしいため、Has Exit TimeのSettingsに0が入力されています。また、Can Transition To Selfのチェックを外しています。これにチェックが入っていると、Any Stateから選したアニメーション中にもう一度同じアニメーションに遷移できてしまいます。今回だとジャンプ中に何回もジャンプを開始するアニメーションをしてしまいます。
Conditionsでは、Jumpがtrueになった段階で、アニメーションを遷移させたいため、このようにしています。
他の矢印の遷移については、次のように設定しました。
Has Exit Time | Conditions | |
---|---|---|
Any State→Walk | Any State→Jumpと同様 | Walk, true |
Walk→Exit | Any State→Jumpと同様 | Walk, false |
Jump→Exit | Any State→Jumpと同様 | Jump, false |
キャラクターを動かしてみる
次のスクリプトとAnimatorをキャラクターにアタッチし、動かしてみましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour { //Animatorを入れる変数 private Animator animator; void Start() { //Animatorを取得 animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { if (Input.GetAxis("Horizontal") > 0) //HorizontalのPositive Buttonが押されたら { this.transform.position += new Vector3(0.1f, 0.0f, 0.0f); //右を向くためにScaleのx成分を変更 this.transform.localScale = new Vector3(-0.5f, 0.5f, 0.5f); //AnimatorパラメーターのWalkをtrueに animator.SetBool("Walk", true); } else if(Input.GetAxis("Horizontal") < 0) //HorizontalのNegative Buttonが押されたら { this.transform.position += new Vector3(-0.1f, 0.0f, 0.0f); //左を向くためにScaleのx成分を変更 this.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); //AnimatorパラメーターのWalkをtrueに animator.SetBool("Walk", true); } else { //入力されていないときはWalkをfalseに animator.SetBool("Walk", false); } if(Input.GetAxis("Jump") > 0) //JumpのPositive Buttonが押されたら { this.transform.position += new Vector3(0.0f, 0.2f, 0.0f); //AnimatorパラメーターのJumpをtrueに animator.SetBool("Jump", true); } else { //AnimatorパラメーターのJumpをfalseに animator.SetBool("Jump", false); } } }
これだけだと物理演算が処理されないので、当たり判定や重力などが反映されないため、Rigidbody2DとCollider2Dもアタッチしておきましょう。
さらに、床として、2DオブジェクトであるSquareを生成(Hierarchyで右クリック→2D Objects→Square)し、BoxCollider2Dをつけておきましょう。
Rigidbody、Colliderについてはこちらにまとめております。ぜひ、ご覧ください。
fineworks-fine.hatenablog.com
fineworks-fine.hatenablog.com
下の画像のようになっていればokです。
実行して確認してみよう
実行してうまく遷移しているか確認してみましょう。
最後に
簡単にAnimatorの使い方についてまとめました。凝ろうと思えば、ジャンプのアニメーションに床との当たり判定をとったり、歩行とダッシュのアニメーションを分けたりなどできます。試行錯誤してみると面白いと思います。