LoginSignup
1
0

よく見る?棒人間ゲーム(2D)の作り方#2

Posted at

はじめに

前回の記事からの続きです。
前回の記事↓

アニメーションをスクリプトから操作する方法について説明します。

Bool型のパラメータをつくる

具体的にどのようにしてスクリプトから操作するかというと、bool型のパラメータをつくり、それがtrueの時はアニメーションを実行、falseの時は実行しないようにします。

まず、Animatorウィンドウの左上にある、Parametersというのを開き、左にある +ボタンを押して、Boolを選択します。
そして、Parameterの名前をRunなど、アニメーションに関係のある名前にしてください。

スクリーンショット 2024-04-01 21.01.06.png

そしたら、Base Layer上のRunブロックを右クリックし、MakeTransitionを選択して[棒人間のオブジェクト名]ブロックに矢印を繋げてください。

今のAnimatorの状態としては、Entryから入ってとりあえず(この画像では)StickManブロックに移動し、Runブロックに移動したあと、またStickManブロックに戻るという妙な感じになっています。
ここから、矢印に条件をつけて、パラメータがtrueの時はRunブロックに移動し、パラメータがfalseの時はRunブロックからStickManブロックに戻るようにします。
つまり、パラメータの値をスクリプトから変えればアニメーションの状態を変えられるのです。

まず、StickManブロックからRunブロックに伸びてる矢印を選択し、インスペクタのConditionsというやつの+マークを押して、Parameterに自分の作ったパラメータ、その隣の値を指定するところにtrueを指定してください。

スクリーンショット 2024-04-01 21.13.54.png

同じように、RunブロックからStickManブロックに伸びている矢印にはそれぞれRun、falseを選択してください。

スクリーンショット 2024-04-01 21.16.21.png

これで完了です。
別のアニメーションを設定するときも、同じようにStickManブロックとそのアニメーションのブロックを繋げば良いです。

プログラムを作る

下のコードで棒人間は基本動きます。
(地面についてないとジャンプしないなどの処理はありませんが…)

StickMan.cs
using UnityEngine;

public class MoveStickMan : MonoBehaviour
{
    public float speed; //速さ
    public float jumpPower;

    private Animator animator; //アニメーター
    private new Rigidbody2D rigidbody; //物理演算のやつ

    public void Start()
    {
        animator = this.GetComponent<Animator>(); //初期化
        rigidbody = this.GetComponent<Rigidbody2D>();
    }

    public void Update()
    {
        float horizontalArrowKey = Input.GetAxis("Horizontal"); //矢印キーを取得

        if (horizontalArrowKey > 0)
        {
            this.transform.localScale =
                new Vector3(Mathf.Abs(this.transform.localScale.x), this.transform.localScale.y); //向きを変える
            animator.SetBool("Run", true); //アニメーションを動かす
        }
        else if (horizontalArrowKey < 0)
        {
            this.transform.localScale =
                new Vector3(-Mathf.Abs(this.transform.localScale.x), this.transform.localScale.y); //向きを変える
            animator.SetBool("Run", true); //アニメーションを動かす
        }
        else
        {
            animator.SetBool("Run", false); //パラメータの値をoffにする
        }

        Vector3 position = this.transform.position;
        position.x += horizontalArrowKey * speed; //移動させる
        this.transform.position = position;

        if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
        {
            rigidbody.AddForce(new Vector3(0.0f, jumpPower), ForceMode2D.Impulse); //ジャンプする
        }
    }
}

このスクリプトとRigidbody2D、Animatorコンポーネントを棒人間にアタッチしてください。
(Animatorは多分最初からついてるかも)

speedとjumpPowerを設定して、床を作ったら、動くと思います。

終わりに

この記事を読んでいただきありがとうございました。
参考になったら幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0