よく見る？棒人間ゲーム（2D）の作り方#2

# はじめに
前回の記事からの続きです。
前回の記事↓

 https://qiita.com/natsuakane/items/87f644d08607e107c6c4

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

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

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

![スクリーンショット 2024-04-01 21.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/54674da3-c8b0-6cf3-e3df-e56ee1ac1c06.png)

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

<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/4606ab1d-38ca-fc75-3e05-d068ba716500.png>

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

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

![スクリーンショット 2024-04-01 21.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/95ca39b2-0e33-24e1-c959-f8ab559b86d8.png)

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

![スクリーンショット 2024-04-01 21.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/341a3c42-d1b0-b3d5-dc83-388aaac32cf7.png)

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

# プログラムを作る
下のコードで棒人間は基本動きます。
（地面についてないとジャンプしないなどの処理はありませんが…）
```CS: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は多分最初からついてるかも）

<img width=300 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572788/c1fab92f-c065-3291-d33f-79967e227e8c.png>

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

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