inct-densan team
56
1
0

第8回 - アニメーションさせよう【Unity講座2022】

Published at November 15, 2022 2:27 p.m.
Edited at November 15, 2022 2:41 p.m.

アニメーションさせよう

今回の目標

  • プレイヤーの走りアニメーションを実装する
  • プレイヤーの死亡アニメーションを実装する
  • 1. プレイヤーの走りアニメーションを実装する

    1-1. アニメーション用のウィンドウを追加する

    アニメーションを実装する際にはアニメーション実装専用のウィンドウがあります。
    デフォルトの状態だとそのウィンドウがないため追加します。
    画面上のにあるwindow > Animation > Animation と Animator の2つを選択して表示させます。
    image
    表示させたウィンドウは適当な場所に配置しておいてください。
    image

    1-2. アニメーションコントローラーの追加

    Unityでオブジェクトのアニメーションを管理するためにはAnimator Controllerというファイルを用います。
    Animator Controllerでは複数のアニメーション(待ち状態、走る、歩く、死ぬ)の切り替えを行うことができるためアニメーションを実装する際は必須です。

    1. Assets直下に「Animator」フォルダを作成します

    2. Animator内に「PlayerAnimator」という名前のAnimator Controller を作成します
      image

    3. Hierarchyウィンドウから「Player」を選択し、Inspectorウィンドウから「Animator」コンポーネントを追加します

    4. Animatorコンポーネントの「Controller」に「PlayerAnimator」をドラッグアンドドロップします
      image

    1-3. アニメーションコントローラーにStateを追加

    Stateというブロックを線で結ぶことで、複数のアニメーションを管理・操作することができます。
    今回は、待ち状態と走り状態、死亡状態の時のアニメーションを実装するのでStateを3つ作成します。

    1. Animatorウィンドウ上で右クリックし、Create State > Empty をクリックしてください
      image

    2. 一番最初に作成したStateはオレンジ色になります

    3. オレンジ色になったStateを選択した状態でInspectorウィンドウを開きます

    4. 名前を「Idle」に変更します
      image

    5. 1 と同様にして新しいStateを2つ作成します

    6. 3~4 と同様にして「Run」「Death」に名前を変えます
      ※ 画像はJumpになっていますが、正しくはDeathです。
      image

    1-4. 待ち状態のアニメーションを実装

    待ち状態のアニメーションを実装します。
    待ち状態は他のアニメーションを再生していない間は常に再生し続けるようにします。

    オレンジ色のStateはゲーム開始時、一番最初に再生されるアニメーションです。
    なので、このStateに待ち状態アニメーションを指定してあげることで、ゲーム開始時から待ち状態のアニメーションを再生できるようになります。

    1. Idle State のInspectorウィンドウを開きます

    2. Motion欄をクリックし、「Idle」を選択します
      ※Idleというアニメーションは複数ありますが、Assets\Asset FTTGR\Animations\Characters\Hero\Idle.animを選択してください
      image

    3. 一度ゲームを実行してみましょう。プレイヤーが屈伸運動をしていればOKです!

    1-5. 走り状態のアニメーションを実装

    1-5-1. アニメーションを割り当てる

    1. Walk StateのInspectorウィンドウを開きます
    2. Motion欄をクリックし、「Run」を選択します
      ※Runというアニメーションは複数ありますが、Assets\Asset FTTGR\Animations\Characters\Hero\Run.animを選択してください

    1-5-2. アニメーションを切り替える機能の実装する①(Unity)

    1. Animatorウィンドウを開き、左上のParametersタブに切り替えます

    2. タブの右上にある「+」をクリックして、「Bool」を選択します
      image

    3. 名前は「isRun」にしてください

    4. Stateを右クリックすると「Make Transition」が選択できます。以下の画像のように矢印をつないでください

      Make Transition

      Make Transition を選択すると矢印が現れます。この矢印で繋いだState間でアニメーションの切り替えができるようになります。また、切り替え方向は矢印一つで一方向です。「Idle」から「Run」につないだ場合は、「Idle」から「Run」へアニメーションの切り替えを行えますが、「Run」から「Idle」へのアニメーションの切り替えはできません

      image image
    5. isRunがtrueの時は「走り状態」、falseの時は「待ち状態」アニメーションになるようにします。
      「Idle」から「Run」のTransitionを選択してInspectorウィンドウを見ます

    6. 「Idle」から「Run」に変移する際のラグをなくします。これで、isRunがtrueになったとき、すぐに走りアニメーションに移り変わります。
      「Has Exit Time」のチェックを外し、「Transition Durations in seconds」を0にしてください。
      image

    7. isRunがtrueになったときにこの遷移が動くように設定します。
      Inspectorウィンドウの「Conditions」を以下のようにしてください。
      image

    8. 同様に「Run」から「Idle」への矢印も設定してください。
      ※ 「Conditions」の設定に注意
      image

    1-5-3. アニメーションを切り替える機能の実装する②(Script)

    1. PlayerMove.csを開きます
    2. Playerに充てられているAnimatorコンポーネントの情報を入れる変数を定義します
      既存のコードの変数定義部分(7行目あたり)にコードを追記します
      csharp
      private Animator animator;
      
    3. 走り状態かどうかを管理する変数を定義します
      ※既存のコードの変数定義部分(7行目あたり)にコードを追記します
      csharp
      private bool isRun = false;
      
    4. Start()内にPlayerに充てられているAnimatorコンポーネントの情報を取得するプログラムを書きます
      ※既に書かれているコードを消さずに追記してください
      csharp
      void Start()
      {
          rb = GetComponent<Rigidbody2D>();
          /* 追記部分 ↓ */
          animator = GetComponent<Animator>();
          /* 追記部分 ↑ */
      }
      animator = GetComponent<Animator>();
      
    5. Update()内に走り状態かそうでないかを切り替えるプログラムを書きます。

      処理の流れ

      1. AまたはDキーが押されたらisRunをtrueに、それ以外の場合はfalseにする
      2. そのisRunをanimator.SetBool()関数を使って 1-5-2.3 で作成したAnimatorウィンドウにあるisRun変数を変更することでTransitionが動作するようになり、アニメーションの遷移ができるようになります
      ※既に書かれているコードを消さずに追記してください
      csharp
      void Update()
      {
          Vector2 position = transform.position;
      
          if (Input.GetKey("d"))
          {
              position.x += speed;
              /* 追記 ↓ */
              isRun = true;
              /* 追記 ↑ */
          } else if (Input.GetKey("a"))
          {
              position.x -= speed;
              /* 追記 ↓ */
              isRun = true;
          } else {
              isRun = false;
          }
          /* 追記 ↑ */
      
          transform.position = position;
      
          if (Input.GetKeyDown(KeyCode.Space) && !isJumping)
          {
              rb.velocity = Vector2.up * jumpPower;
              isJumping = true;
          }
      
          /* 追記 ↓ */
          animator.SetBool("isRun", isRun);
          /* 追記 ↑ */
      }
      

      1-6. 実践:死亡状態のアニメーションを実装

      走り状態のアニメーションを実装するときの方法を参考にして死亡状態のアニメーションを実装してみましょう!

      ヒント

      HPの管理はHPManager.csで行っています。このファイル内でHPを管理するlifeCountが0になった場合に、Death State に移動できるように設定してあげればいいでしょう。

      ※死亡アニメーションがループ再生される場合
      Deathアニメーションは Asset FTTGR のを使用していますが、このアニメーションがデフォルト状態だと、ループ再生がtrueとなっています。そのため、ループ再生をfalseにしなければいけません。

      1. Assets/Asset FTTGR/Animations/Characters/Hero/Death.animに移動し、Deathを選択して、Inspectorウィンドウを見てください。
      2. 「Loop TIme」のチェックを外します。
        image