キャラクターをアニメーションさせる(Unity6)

開発Tips

Unityちゃんを移動させるところまで作りましたが、アニメーションしないので滑って移動しています。

なのでアニメーションをつけてちゃんと動いている感じを出したい。

名前を「PlayerAnimeController」にしました。名前はわかればなんでもいいです。

ダブルクリックするとAnimatorタブが開きます。

Entryから始まり、Exitで終わりになります。Any Stateはいつでも呼び出せるものと思っていいです。

ここにAnimation Clipを入れていくわけです。UnityちゃんにはあらかじめいくつかのAnimation Clipが含まれていますのでそれを利用します。

まずは何もしていない(Idle)状態を追加します。この中では、立っているStandingですかね。

歩かせたいのでWalkingを追加します。しかし、StandingとWalkingが繋がっていません。

ノードを選択して、右クリック「Make Transition」でノードを繋げます。

Standingで右クリック「Make Transition」からWalkingにつないで、歩き始めたらWalkingに移動する
Walkingで右クリック「Make Transition」からStandingにつないで、止まったらStandingに戻る

ノードを遷移するにもきっかけがないといけません。線をつないだだけでは何をきっかけ(トリガー)にして遷移すればいいかわからないので、きっかけを設定します。

まずがパラメータの作成です。今回の場合、移動になります。移動は移動量があるのでFloatにします。
ようは、歩いているとき、走っているときで移動量が違います。その移動量でアニメーションを変化させたいのでFloatにしました。


次に矢印を選択し、inspectorから「Has Exit Time」のチェックを外します。このチェックがついているとExit Timeまでアニメーションが変わりません。

では移動の値の設定です。

Floatの値を変更するのはSetFloatを使います。

    // Startは、MonoBehaviourが作成された後、Updateが最初に実行される前に1回呼び出されます。
    void Start()
    {        
        character = GetGameObjectByTagName("Character");    //キャラクターPrefabを取得
        animator = GetComponent<Animator>();                //Animatorコンポーネントを取得
    }

    // 更新は1フレームにつき1回呼び出される
    void Update()
    {
        if (Input.GetKey("left")) {
            //左キーを押したとき
            transform.position -= transform.right * Time.deltaTime * walk_speed;    //左に移動
            character.transform.rotation = Quaternion.Euler(0, -90, 0);             //左を向く
            animator.SetFloat("move", walk_speed);                                  //歩く速度をwalk_speedに設定
		} else if (Input.GetKey("right")) {
            //右キーを押したとき
            transform.position += transform.right * Time.deltaTime * walk_speed;    //右に移動
            character.transform.rotation = Quaternion.Euler(0, 90, 0);              //右を向く
            animator.SetFloat("move", walk_speed);                                  //歩く速度をwalk_speedに設定
		}
        else {
            animator.SetFloat("move", 0);                                           //歩く速度を0に設定
        }
    }

歩いているときはwalk_speedをセットし、止まったら0にしています。
GetGameObjectByTagNameは、私が作った関数なので存在しません。

以下の記事で紹介しています。

プレイヤーObjectを作って移動、カメラの追従をする(Unity6)
キャラクターにカメラを追従させたい場合や、キャラクターを変更したいなど直接キャラクターのPrefabでやってしまうと結構面倒なことになります。新しく作成(Instantiate)したときに、カメラを設定、必要なコンポーネントを設定などです。...

さて、実行してみます。

こんな感じになりました。

コメント

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