はじめに
前回の記事からの続きです。
前回の記事↓
アニメーションをスクリプトから操作する方法について説明します。
Bool型のパラメータをつくる
具体的にどのようにしてスクリプトから操作するかというと、bool型のパラメータをつくり、それがtrueの時はアニメーションを実行、falseの時は実行しないようにします。
まず、Animatorウィンドウの左上にある、Parametersというのを開き、左にある +ボタンを押して、Boolを選択します。
そして、Parameterの名前をRunなど、アニメーションに関係のある名前にしてください。
そしたら、Base Layer上のRunブロックを右クリックし、MakeTransitionを選択して[棒人間のオブジェクト名]ブロックに矢印を繋げてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3572788%2F4606ab1d-38ca-fc75-3e05-d068ba716500.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=868323d04c860e4fa592abd2d422eb0a)
今のAnimatorの状態としては、Entryから入ってとりあえず(この画像では)StickManブロックに移動し、Runブロックに移動したあと、またStickManブロックに戻るという妙な感じになっています。
ここから、矢印に条件をつけて、パラメータがtrueの時はRunブロックに移動し、パラメータがfalseの時はRunブロックからStickManブロックに戻るようにします。
つまり、パラメータの値をスクリプトから変えればアニメーションの状態を変えられるのです。
まず、StickManブロックからRunブロックに伸びてる矢印を選択し、インスペクタのConditionsというやつの+マークを押して、Parameterに自分の作ったパラメータ、その隣の値を指定するところにtrueを指定してください。
同じように、RunブロックからStickManブロックに伸びている矢印にはそれぞれRun、falseを選択してください。
これで完了です。
別のアニメーションを設定するときも、同じようにStickManブロックとそのアニメーションのブロックを繋げば良いです。
プログラムを作る
下のコードで棒人間は基本動きます。
(地面についてないとジャンプしないなどの処理はありませんが…)
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は多分最初からついてるかも)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3572788%2Fc1fab92f-c065-3291-d33f-79967e227e8c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=254658f1ec7af31bb2b02e6cb2269cb1)
speedとjumpPowerを設定して、床を作ったら、動くと思います。
終わりに
この記事を読んでいただきありがとうございました。
参考になったら幸いです。