移動のアニメーション、ジャンプの動きに続いて、今度はジャンプのアニメーションをつけていきましょう。
アイドリング状態、歩いている状態、どちらからでもジャンプのアニメーションに遷移できるようにします。
このページは、下記の続きを制作しています。
【Unity C#】前進と停止のアニメーション
【Unity C#】キャラクターをジャンプさせる
ステートを作成
アニメーターウィンドウ > パラメータ > +マーク
Boolを作成し、Jumpingという名前にしました。
ステートを作成します。
画面上で右クリック > ステートの作成 > 空
Jumpという名前にしました。
インスペクターに、Motionという項目があります。
表示させたいアニメーションを選択しましょう。
Idleのステートを右クリックして、遷移を作成。
矢印を、Jumpまで伸ばします。
矢印を選択して、インスペクターを設定します。
アイドリング状態からジャンプするということで、JumpingをTrueに。
逆に、Jumpステートから遷移をIdleへ向けます。
ジャンプからアイドリングへ戻るので、Jumpingはfalseですね。
全く同じように、WalkステートとJumpステートの間も、遷移させます。
デフォルトの設定では、アニメーションに入るのに、少しだけ間(0.25秒)があったりします。
遷移間隔を0にすれば、すぐにアニメーションが始まります。
アニメーションのスクリプト
ここまで準備できれば、今度はスクリプトを書いていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class WalkingMove : MonoBehaviour { [SerializeField] Animator anim; private Rigidbody rb; public float upForce = 200f; private bool isGround; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { if(Input.GetKey("up")) { transform.position += transform.forward * 0.03f; anim.SetBool ( "Walking", true ); } else { anim.SetBool ( "Walking", false ); } if(Input.GetKey("right")) { transform.Rotate(0,1,0); } if(Input.GetKey("left")) { transform.Rotate(0,-1,0); } if (isGround == true) { if(Input.GetKeyDown("space")) { anim.SetBool ( "Jumping", true ); //ジャンプアニメーションをtrueに isGround = false; rb.AddForce(new Vector3(0, upForce, 0)); } } } void OnCollisionEnter(Collision other) { if (other.gameObject.tag == "Ground") { isGround = true; anim.SetBool ( "Jumping", false ); //ジャンプアニメーションをfalseに } } } |
2行だけコードを追加しています。
スペースキーが押されたら、JumpingをTrueに。
Jumpingをfalseにするのは、着地したタイミングです。
プレイしてみましょう。
歩きながらジャンプ、着地するとアニメーションが戻ります。