【2D機能】走りアニメーション制御【アニメーター】

●はじめに

2D横スクロールアクション作成を目指し、プレイヤーキャラクターのアニメーションを制御してみます。

待機からスペースキーでジャンプ、左右キーで走るようにします。

アセットは無料公開されている「Warped Caves」をお借りします。

 ↑これが完成します。

●走りアニメーション

▷状態と遷移

走りアニメーションを追加し、待機から相互に遷移するようにします。

player_idleと相互遷移するplayer_runを追加

①プロジェクトの「Assets>Anime>player_run」をアニメーター右側にドラッグ&ドロップ
②アニメーターの「player_idle」を右クリックし、「遷移を作成」をクリック
③アニメーターの「player_run」をクリック
④アニメーターの「player_run」を右クリックし、「遷移を作成」をクリック
⑤アニメーターの「player_idle」をクリック

移動速度を受け取る「Float」型のパラメーター「Speed」を作成します。

パラメーターを追加

①アニメーター左上のタブ「パラメーター」をクリック
②アニメーター左上の「+」をクリックし、「Float」をクリック
③「Speed」を入力してENTERキーを押す

▷遷移設定

待機から走りへの遷移情報を設定します。

player_idleからplayer_runへの遷移情報

①アニメーターの「player_idle」から「player_run」への遷移をクリック
②インスペクター中央辺り「終了時間あり」右のチェックをクリック
③インスペクター下部「Conditions」右下の「+」をクリック
④「Conditions」内のドロップダウンをクリックし、「Speed」をクリック

走りから待機への遷移情報を設定します。

player_runからplayer_idleへの遷移情報

①アニメーターの「player_run」から「player_idle」への遷移をクリック
②インスペクター中央辺り「終了時間あり」右のチェックをクリック
③インスペクター下部「Conditions」右下の「+」をクリック
④「Conditions」内のドロップダウンをクリックし、「Speed」をクリック
⑤「Conditions>Speed」右のドロップダウンをクリックし、「Less」をクリック
⑥「Conditions>Speed」右端に「0.1」を入力

Speedを0を超えた値にすると走り、0.1未満にすると止まる

▷遷移制御

Playerスクリプトを修正し、パラメーターを制御してキー操作出来るようにします。

水平方向の入力値を取得しています。
左キーを押し続けると-1まで減少し、右キーを押し続けると1まで増加します。
左右関係なく扱うため、絶対値をSpeedに設定しています。

ついでにスペースキーでジャンプするよう条件を修正してます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    Animator animator;      // アニメーターコンポーネントを入れる変数

    // Start is called before the first frame update
    void Start()
    {
        // 自分に割り当てられているアニメーターコンポーネントを取得
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        // ジャンプキーが押された場合
        if (Input.GetButtonDown("Jump") == true)
        {
            // トリガー「Jump」をONにする
            animator.SetTrigger("Jump");
        }

        // 水平方向の入力値を取得
        float axisH = Input.GetAxis("Horizontal");
        // Float「Speed」に「水平方向の入力値」の絶対値を設定
        animator.SetFloat("Speed", Mathf.Abs(axisH));
    }
}

●走り中にジャンプ

▷遷移作成

走りアニメーション中にジャンプ出来ない状態です。

なので走りからジャンプへ遷移を追加します。

player_runからplayer_jumpへの遷移を追加

①アニメーターの「player_run」を右クリックし、「遷移を作成」をクリック
②アニメーターの「player_jump」をクリック

▷遷移情報

遷移情報はトリガーがONになったら即ジャンプするように設定します。

①アニメーターの「player_run」から「player_jump」への遷移をクリック
②インスペクター中央部の「終了時間あり」にあるチェックをクリック
③インスペクター下部の「Conditions」右下にある「+」をクリック

▷動作確認

走っている最中にスペースキーを押すと即ジャンプに遷移します。

●左右方向に向く

▷スクリプト修正

左右キーどちらを押していても右向きのままです。

スケールのXを-1にすると左向きにできます。
水平入力がマイナスの時は-1とし、左向きになるようスクリプトを修正します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    Animator animator;      // アニメーターコンポーネントを入れる変数

    // Start is called before the first frame update
    void Start()
    {
        // 自分に割り当てられているアニメーターコンポーネントを取得
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        // ジャンプキーが押された場合
        if (Input.GetButtonDown("Jump") == true)
        {
            // トリガー「Jump」をONにする
            animator.SetTrigger("Jump");
        }

        // 水平方向の入力値を取得
        float axisH = Input.GetAxis("Horizontal");
        // Float「Speed」に「水平方向の入力値」の絶対値を設定
        animator.SetFloat("Speed", Mathf.Abs(axisH));

        // 水平方向入力中の場合
        if (axisH != 0)
        {
            // 水平入力がマイナスの場合はXスケールを-1、それ以外は1とする
            float xScale = axisH < 0 ? -1 : 1;
            // スケールを設定
            transform.localScale = new Vector3(xScale, 1, 1);
        }
    }
}

▷動作確認

左キー入力中は左、右キー入力中は右を向くようになりました。
停止してもそのままジャンプしても向きが継続されます。

左向きに走る

●完成

待機、ジャンプ、走りのアニメーションが制御できるようになりました。

弾を撃つアニメーション3パターンにやられも制御したかったですが、
土曜はボルダリング、日曜はDDR、RPGツクールも考えるとなると中々厳しいですね。

弾撃ちアニメーションもいいけど、ここまで来たらちゃんと移動してジャンプしてマップ内を動きたい。
ということで、次回の目標はマップ内を動けるようにする、です。

頑張ろう。

コメント

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