見出し画像

リアルワールドゲームを作ってみよう! #3

さて今回は、前回導入したキャラぷちゴンを上下左右に動かしてみたいと思います。

➡️動いている様子はこんな感じ↓


ある程度のアニメーションであればUnityの機能を使えば簡単に実装できます。
では、順をおって説明します。


【Animatorの準備】

1. アニメーターコントローラーを作成

 Projectビュー > Create > AnimatorController
 名前は「PuchigonSprite」

   ※Animationsフォルダを作成して整理すると管理しやすくなります

2. HierarchyビューのPlayerオブジェクトにAnimatorコンポーネントを追加

追加したAnimatorコンポーネントのControllerへ先程作成したアニメーターコントローラーをアタッチさせる


【スプライトアニメーションの作成】
1. Window > Animationウインドウを開く

2. Createボタンを押してアニメーションクリップ新規作成 
※名前は「PuchigonSprite@front」

3. スプライトアニメーションのキーフレームとなるspriteをドラック&ドロップ

イメージはこんな感じ↓


4. 他にも横や後ろ姿のアニメーションも追加
アニメーションウィンドウの左上のクリップトグルから [ Create New Clip]
名前は同様に
   ・PuchigonSprite@back
   ・PuchigonSprite@left
   ・PuchigonSprite@right

結果的にProjectビューはこうなる


【メカニムの設定】

1. 作成したアニメーションクリップ間のステート遷移を設定
Playerオブジェクトを選択した状態でAnimatorウィンドウを開く

2. ステート遷移の判断基準となるパラメータを定義する
Animatorウィンドウ > Parameters > ➕ボタンからBoolを選択 > 名前をfrontとする
同様のパラメータを以下3つ作成する
   ・back
   ・left
   ・right

3. PuchigonSprite@frontステートを右クリックして [ Make Transition ] を選択

  
そうすると矢印(トランジション)が追従するようになるので、そのままPuchigonSprite@backステートへ繋ぐ
作成されたトランジションをクリックしてInspectorビューから➕ボタンでConditionを追加し、backパラメータを指定する
その際、[ Has Exit Time ] のチェックは外しておく。

同じ様な動作を繰り返すことで4つのステートがそれぞれ他3つのステートと繋がります

こんな感じになっていればOK


【アニメーション切り替え処理をコーディング】
1. animator.SetBool(パラメータ名, true) だけでアニメーション遷移できちゃいます! 


コーディングはすごくシンプルで簡単

/// プレイヤーの座標、移動管理
public class PlayerController : MonoBehaviour {

    //プレイヤーのアニメーションコントローラー
    private Animator animator;
    
    //プレイヤーのステート
    public enum PlayerState{
        front,
        left,
        right,
        back
    }

    private PlayerState state;

    void Awake(){
         animator = gameObject.GetComponent();
    }

    //プレイヤーの向きを変更
    public void DirectionSet(PlayerState st){
        switch(st){
             case PlayerState.front:
                 state = PlayerState.front;
                 break;
             case PlayerState.back:
                 state = PlayerState.back;
                 break;
             case PlayerState.right:
                 state = PlayerState.right;
                 break;
             case PlayerState.left:
                 state = PlayerState.left;
                 break;
        }

        //プレイヤーの向きを変更
        animator.SetBool("front", state == PlayerState.front);
        animator.SetBool("left", state == PlayerState.left);
        animator.SetBool("right", state == PlayerState.right);
        animator.SetBool("back", state == PlayerState.back);
    }
}

なかなかのボリュームになってしまいましたが、
なんども繰り替えし実装していけば慣れていくと思います。

この記事が気に入ったらサポートをしてみませんか?