簡単な2DアニメーションPart2-上下左右移動の基本-【Unityゲーム制作】

今回は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アニメーションを動作させておくために必要と言う感じですね。

あくまでも簡単な一例で、キャラクターをどう動かしたいかで割と実装方法が変わってくるのかなーと。

タイトルとURLをコピーしました