[UNITY]アクションゲームを作る(キャラクターを動かす)[2]

前回の内容はこちら
https://pasteldrops.com/2019/03/04/post-720/

前回、パラパラ漫画で動くキャラクターを作ったので今回は、それをキーボード操作で動かしていきます。

と、その前に前回と同じ方法で、静止状態のアニメーションも作ります。
静止画でもいいんですが、やっぱり味気ないと言うかリズミカルに動いてたいですよね。

ということで、静止状態を作成しました。

この静止アニメーションや走っているアニメーションをどのタイミングで実行させるかまずは定義しましょう。
シーンタブにアニメーターがあると思うのでがあるのでそれを開いてみましょう。

この画面ではまず静止状態がメイン状態になっています。
ここに走っている状態のアニメーションを追加していきます。

まずはシーン上を右クリックして Create State > Empty から状態オブジェクトを作っていきます。

これにダッシュのモーションを設定してあげます。ついでにわかりやすいように名前も変えてあげましょう。

今回は、静止した状態からボタンを押すと走り出し、ボタンを離すと静止するゲームを作りたいので、
静止モーション → ダッシュモーションを接続していきます。
静止モーションを右クリックして、MakeTransitionで線をつないでいきます。

同様にダッシュモーション → 静止モーション も設定して完成です。

次にパラメータ設定です。
どのような状態でモーションが遷移するか指定します。
パラメータはFloat Int Bool Trriger の4パターンがありますが、

今回、矢印ボタンを押したらダッシュをし、離したらダッシュを辞めるの2パターンなので、Boolを選択します。

その後、静止モーション → ダッシュモーション の状態に設定していきます。
パラメータdashがtrueになった時ダッシュするように指定しています。

更に、押したらすぐに走ってほしいですよね。ラグとかいらないんで
Transition Duration を0にします。

逆矢印も同様に
パラメータdashがfalseになった時静止するように指定しています。

これでプログラムを書く準備ができました。
今できたアニメーションコントローラをScene上のキャラクターにセットします。ついでに動かせるようにRigidBody2Dと当たり判定Colliderもつけてあげましょう。

最後にプログラムを書いていきましょう。
右矢印と左矢印を押下した時、
 ・DashがTrueになる(Dashモーションが発火する)
 ・押した方向に動く
 ・棒人間を回転させ進行方向を向く

離した時
 ・DashがFalseになる(Idleモーションが発火する)

を書いていきます。

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

public class MainCharactorController : MonoBehaviour
{
    private float CharactorSpeed = 3.0f;
    private Rigidbody2D rb;
    private Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        rb = this.GetComponent();
        animator = this.GetComponent();
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            animator.SetBool("Dash", true);
            this.transform.eulerAngles = new Vector3(0, 180, 0);
            this.transform.Translate(-CharactorSpeed * Time.deltaTime, 0, 0);
        }
        else if (Input.GetKey(KeyCode.LeftArrow))
        {
            animator.SetBool("Dash", true);
            this.transform.eulerAngles = new Vector3(0, 0, 0);
            this.transform.Translate(-CharactorSpeed * Time.deltaTime, 0, 0);
        }
        else if (Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.LeftArrow))
        {
            animator.SetBool("Dash", false);
        }

    }
}

あとは落ちないように地面を作ってあげて…

完成です。
これで最低限の動きは出来ます。次はジャンプですかねー?

続き
https://pasteldrops.com/2019/03/10/post-753/

コメント

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