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

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

概要

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

事前準備

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

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

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

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

スクリプトの作成

C#のスクリプトを作成します。Unityのウィンドウの下部の[プロジェクト]ウィンドウの[作成]ボタンをクリックします。下図のメニューが表示されますので、[C# スクリプト]をクリックします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像1

スクリプトファイルが[Assets]ウィンドウに追加されます。ファイル名を "UnityChanMove.cs" とします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像2

作成した、"UnityChanMove.cs" をダブルクリックします。Visual Studioが起動しコード編集画面が表示されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像3

下記のコードを記述します。コード記述後、保存してVisual Studioを閉じます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像4

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のシーンビューに戻ります。シーンに配置していあるユニティちゃんをクリックして選択します。右側の[インスペクター]ウィンドウの下部の[コンポーネントを追加]ボタンをクリックします。下図のメニューが表示されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像5

検索ボックスで検索する、または、メニューの[スクリプト]をクリックします。選択できるスクリプトの一覧が表示されます。先ほど作成した"UnityChanMove"をクリックして選択します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像6

[Unity Chan Move(Script)]がコンポーネントとして追加されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像7

Playボタンをクリックしてプロジェクトを実行します。下図の画面が表示されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像8

カーソルの[↑]キーを押すとユニティちゃんが前進します。ただしアニメーションはせず、立ち状態のアニメーションで滑るように移動します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像9

左右のカーソルキーでユニティちゃんが回転します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像10
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像11
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像12

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

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

モデルに割り当てた "SD_unitychan_motion_Generic" アニメーションモデルを編集します。[Assets]ウィンドウの "SD_unitychan_motion_Generic" をダブルクリックします。下図のアニメーター編集画面が表示されます。
ウィンドウ上部の[パラメーター]タブをクリックしパラメーターウィンドウを表示します。ウィンドウ右上の[+]ボタンをクリックします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像13

[+]ボタンをクリックすると下図のメニューが表示されます。メニューの[Bool]をクリックします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像14

新しいパラメーターが追加されます。名称を "StartWalk" にします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像15

アニメーターウィンドウの右側のチャートエリアで[Standing(loop)]と[Walking(loop)]の間をつなぐ下向きの矢印をクリックして選択します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像16

選択後、右側の[インスペクター]ウィンドウの下部の[Conditions]セクションの[+]ボタンをクリックします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像17

クリックすると新しいConditionが追加されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像18

左側のコンボボックスを開き "StartWalk"を選択します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像19

もともとあったConditionをクリックして選択します。選択後右下の[-]ボタンをクリックします。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像20

選択されたConditionが削除されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像21

続いて、[Walking(loop)]と[Standing(loop)]の間をつなぐ上向きの矢印をクリックして選択します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像22

選択後、右側の[インスペクター]ウィンドウの下部の[Conditions]セクションの[Back]のコンボボックスを開きます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像23

先ほどは新しいConditionを追加して、元のConditionを削除しましたが、元のConditionの設定を変更しても同じ動作になります。

Conditionの左側のコンボボックスを開き "StartWalk" の項目を選択します。
Conditionの右側のコンボボックスを開き、"false" を選択します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像24

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

Conditionが設定できました。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像26

コードの変更

先に作成した、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ボタンをクリックしてプロジェクトを実行します。下図の画面が表示されます。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像27

[↑]キーを押します。ユニティちゃんが歩くモーションで前進します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像28

左右のカーソルキーで回転し[↑]キーで向いている方向に前進します。
ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する:画像29

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

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