ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する

ユニティちゃんをキー入力で移動させる手順を紹介します。

概要

ユニティちゃんをキー入力で移動させます。移動時には歩きのアニメーションで移動する動作にします。移動の基本はスプライトを移動させる場合と同じです。こちらの記事も合わせて確認してください。

事前準備

ユニティちゃんのシーンへの配置

ユニティちゃんのインポート、シーンへの配置をします。こちらの記事を参照してください。

アニメーションコントローラーの設定

ユニティちゃんのモデルにアニメーションコントローラを割り当てます。今回はモデルに付属している "SD_unitychan_motion_Generic" アニメーションモデルを割り当てます。設定手順についてはこちらの記事の「補足」のセクションにあるモデルに付属しているアニメーションコントローラーを割り当てる手順を参照してください。

スクリプトの作成

C#のスクリプトを作成します。Unityのウィンドウの下部の[プロジェクト]ウィンドウの[作成]ボタンをクリックします。下図のメニューが表示されますので、[C# スクリプト]をクリックします。


スクリプトファイルが[Assets]ウィンドウに追加されます。ファイル名を "UnityChanMove.cs" とします。


作成した、"UnityChanMove.cs" をダブルクリックします。Visual Studioが起動しコード編集画面が表示されます。


下記のコードを記述します。コード記述後、保存してVisual Studioを閉じます。


UnityChanMove.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnityChanMove : MonoBehaviour
{
  private Animator animator;

  // Start is called before the first frame update
  void Start()
  {
    animator = GetComponent<Animator>();
    state = UnityChanState.STAND;
  }

  // Update is called once per frame
  void Update()
  {
    if (Input.GetKey("up")) {
      transform.position += transform.forward * 0.01f;
    }

    if (Input.GetKey("right")) {
      transform.Rotate(0, 10, 0);
    }
    else if (Input.GetKey("left")) {
      transform.Rotate(0, -10, 0);
    }
  }
}

モデルへのスクリプトの追加

Unityのシーンビューに戻ります。シーンに配置していあるユニティちゃんをクリックして選択します。右側の[インスペクター]ウィンドウの下部の[コンポーネントを追加]ボタンをクリックします。下図のメニューが表示されます。


検索ボックスで検索する、または、メニューの[スクリプト]をクリックします。選択できるスクリプトの一覧が表示されます。先ほど作成した"UnityChanMove"をクリックして選択します。


[Unity Chan Move(Script)]がコンポーネントとして追加されます。


Playボタンをクリックしてプロジェクトを実行します。下図の画面が表示されます。


カーソルの[↑]キーを押すとユニティちゃんが前進します。ただしアニメーションはせず、立ち状態のアニメーションで滑るように移動します。


左右のカーソルキーでユニティちゃんが回転します。



アニメーターコントロールの編集

ユニティちゃんが前進したときに歩くモーションをする動作を追加します。

モデルに割り当てた "SD_unitychan_motion_Generic" アニメーションモデルを編集します。[Assets]ウィンドウの "SD_unitychan_motion_Generic" をダブルクリックします。下図のアニメーター編集画面が表示されます。
ウィンドウ上部の[パラメーター]タブをクリックしパラメーターウィンドウを表示します。ウィンドウ右上の[+]ボタンをクリックします。


[+]ボタンをクリックすると下図のメニューが表示されます。メニューの[Bool]をクリックします。


新しいパラメーターが追加されます。名称を "StartWalk" にします。


アニメーターウィンドウの右側のチャートエリアで[Standing(loop)]と[Walking(loop)]の間をつなぐ下向きの矢印をクリックして選択します。


選択後、右側の[インスペクター]ウィンドウの下部の[Conditions]セクションの[+]ボタンをクリックします。


クリックすると新しいConditionが追加されます。

左側のコンボボックスを開き "StartWalk"を選択します。

もともとあったConditionをクリックして選択します。選択後右下の[-]ボタンをクリックします。

選択されたConditionが削除されます。


続いて、[Walking(loop)]と[Standing(loop)]の間をつなぐ上向きの矢印をクリックして選択します。


選択後、右側の[インスペクター]ウィンドウの下部の[Conditions]セクションの[Back]のコンボボックスを開きます。


先ほどは新しいConditionを追加して、元のConditionを削除しましたが、元のConditionの設定を変更しても同じ動作になります。
Conditionの左側のコンボボックスを開き "StartWalk" の項目を選択します。
Conditionの右側のコンボボックスを開き、"false" を選択します。

Conditionが設定できました。

コードの変更

先に作成した、UnityChanMove.cs を開き、下記のコードを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnityChanMove : MonoBehaviour
{
  private enum UnityChanState { STAND, WALK };

  private Animator animator;
  private UnityChanState state;

  // Start is called before the first frame update
  void Start()
  {
    animator = GetComponent<Animator>();
    state = UnityChanState.STAND;
  }

  // Update is called once per frame
  void Update()
  {
    if (Input.GetKey("up")) {
      transform.position += transform.forward * 0.01f;

      if (state == UnityChanState.STAND) {
        state = UnityChanState.WALK;
        animator.SetBool("StartWalk", true);
      }
    }
    else {
      if (state == UnityChanState.WALK) {
        state = UnityChanState.STAND;
        animator.SetBool("StartWalk", false);
      }
    }

    if (Input.GetKey("right")) {
      transform.Rotate(0, 10, 0);
    }
    else if (Input.GetKey("left")) {
      transform.Rotate(0, -10, 0);
    }
  }
}

解説

UnityChanState 型のstate変数にユニティちゃんの現在動作の状態を格納します。今回は歩きと静止状態のみですので、STAND, WALK の2種類の値を用意しています。カーソルキーの[↑]が押された場合、ユニティちゃんが静止状態(STAND)であれば、ユニティちゃんをWALK状態にします。同時に、animator.SetBool メソッドを呼び出し StartWalK パラメーターをtrueにします。このパラメータ変更により、静止状態から歩くアニメーションのモーションに変化します。
[↑]キーが離された場合、ユニティちゃんの状態がWALKであれば、状態をSTANDに変更し、animator.SetBool メソッドを呼び出し StartWalK パラメーターをfalseにします。StartWalパラメーターがfalseになると、歩くアニメーションから立ち状態のアニメーションへと移行します。

動作確認

Playボタンをクリックしてプロジェクトを実行します。下図の画面が表示されます。


[↑]キーを押します。ユニティちゃんが歩くモーションで前進します。


左右のカーソルキーで回転し[↑]キーで向いている方向に前進します。


歩きのアニメーションモーションを設定して、キー入力によりユニティちゃんを移動させることができました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-12-23
iPentec all rights reserverd.