今回はUnityでアニメーションを作成するその2です。
トップダウン式2Dゲームの移動アニメーション作成方法で、ブレンドツリーを使っていきます。
はじめに
Unityのインストール方法・日本語化は下記から。
アニメーションその1は下記から。
Unityのヴァージョン
今回使用するのは「Unity 2020.3.21f1」ヴァージョン。2Dテンプレートで作成しています。
2Dキャラクターの「移動」アニメーションの超基本その2と言う感じで、アニメーションのブレンドツリーを使っていきます。
事前準備
ここは前回のアニメーションの超基本と同じです。既に追加してある場合は飛ばして大丈夫です。
まずはアセットストアから素材を追加。

使う画像だけを選択してインポートしておきます。

インポートした画像は分かりやすい場所に移動。

インポートした画像をすべて選択して、「ユニット毎のピクセル数」を10に変更しておきます。

作成開始
ここから実際に作成していきます。
プレイヤーの作成
まずは「空のオブジェクト」を追加して、Playerに名前を変更。
コンポーネントを追加から「スプライトレンダラー」、「アニメータ」を追加しておきます。
スプライトに待機状態(アイドル状態)の画像をセット。

Animフォルダを作成して、「アニメーターコントローラー」を作成。

コントローラーにくっつけておきます。

アニメーションクリップの作成
アニメーションウィンドウを開いて、アニメーションクリップを作成します。
各アイドル状態のクリップを作成するので、「idle_back」、「idle_front」、「idle_right」、「idle_left」の4つを作成します。

「idle_left」は右向きの画像を左向きにするので、「プロパティーを追加」からfilpXを追加してチェック。

同じようにwalkのクリップも4つ作成。

最終的に8つのアニメーションがある感じ。

ブレンドツリーの作成
自動で追加されたアニメーターのステートは8つ全てを削除。
ステートの作成→「新規のブレンドツリーから」を選択。

追加したブレンドツリーの名前をidleTreeに変更。

アニメーターのパラメーターにfloat型でXとY、bool型でisWalkingを追加。

idleTreeをダブルクリックして、ブレンドタイプを「2DsimpleDirectional」に変更。ParametersをXとYに、モーションを4つにします。

各モーションにアニメーションを割り当てます。
Xが横方向で1で右向き、ー1で左向き。Yは縦方向で1で上向き状態。ー1で下向き状態です。

ブレンドツリーをコピーしてwalkも同じように作成します。

idle状態からwalkへの移動条件はisWalkingがtrue、反対がfalseですね。時間は全て0にしておきます。この辺は前回と同じですね。

スクリプトの作成
最後にスクリプトを作成してPlayerオブジェクトに突っつければ完成です。スクリプト名はPlayerMovingにして中身は下記の様に変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMoving : MonoBehaviour { [SerializeField] private float speed; private Rigidbody2D body; private Animator anim; private Vector2 movement; private void Awake() { body = GetComponent<Rigidbody2D>(); anim = GetComponent<Animator>(); } private void Update() { movement.x = Input.GetAxisRaw("Horizontal"); movement.y = Input.GetAxisRaw("Vertical"); anim.SetBool("isWalking", movement != Vector2.zero); if (movement != Vector2.zero) { anim.SetFloat("X", movement.x); anim.SetFloat("Y", movement.y); } } private void FixedUpdate() { body.MovePosition(body.position + movement.normalized * speed * Time.fixedDeltaTime); } }
簡単に説明するとキー入力でmovement変数に値を代入し、movement変数(±1)をアニメーターのパラメータにそのままセットしているという感じですね。
条件で0以外にしているのは、キーを離した時にXとYに0が入ってしまい初期idleのアニメーションになるからですね。最終状態のidleアニメーションを動作させておくために必要と言う感じですね。
あくまでも簡単な一例で、キャラクターをどう動かしたいかで割と実装方法が変わってくるのかなーと。