ユニティちゃんをキー入力で移動させる - 歩きのモーションアニメーションを設定する
ユニティちゃんをキー入力で移動させる手順を紹介します。
概要
ユニティちゃんをキー入力で移動させます。移動時には歩きのアニメーションで移動する動作にします。移動の基本はスプライトを移動させる場合と同じです。
こちらの記事も合わせて確認してください。
事前準備
ユニティちゃんのシーンへの配置
ユニティちゃんのインポート、シーンへの配置をします。
こちらの記事を参照してください。
アニメーションコントローラーの設定
ユニティちゃんのモデルにアニメーションコントローラを割り当てます。今回はモデルに付属している "SD_unitychan_motion_Generic" アニメーションモデルを割り当てます。設定手順については
こちらの記事の「補足」のセクションにあるモデルに付属しているアニメーションコントローラーを割り当てる手順を参照してください。
スクリプトの作成
C#のスクリプトを作成します。Unityのウィンドウの下部の[プロジェクト]ウィンドウの[作成]ボタンをクリックします。下図のメニューが表示されますので、[C# スクリプト]をクリックします。
スクリプトファイルが[Assets]ウィンドウに追加されます。ファイル名を "UnityChanMove.cs" とします。
作成した、"UnityChanMove.cs" をダブルクリックします。Visual Studioが起動しコード編集画面が表示されます。
下記のコードを記述します。コード記述後、保存してVisual Studioを閉じます。
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を愛用