※ これは 2020/12/25 時点の Unity 2020.2.1f1 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回カーソルキーで下記のようなねこキャラを上下左右の4方向に動かした・・・が、押しっぱなしで移動せず、押した瞬間しか移動しない!
これだと不便なので押しっぱなしで移動するようにしてみる
スポンサードリンク
といってもやることはスクリプト Cat.cs
の修正のみ
using UnityEngine; using UnityEngine.InputSystem; public class Cat : MonoBehaviour { private Animator animator = null; private Vector2 move = Vector2.zero; public void Awake() { this.animator = this.GetComponent<Animator>(); } public void Update() { if (this.move != Vector2.zero) { this.transform.Translate(this.move * Time.deltaTime * 3f); } } public void OnMove(InputAction.CallbackContext context) { // キー入力が離れた場合も更新される this.move = context.ReadValue<Vector2>(); var normalized = new Vector3(Mathf.Round(move.normalized.x), Mathf.Round(move.normalized.y), 0); // アニメーションが上下左右に排他になるよう制御 if (normalized.x != 0) { this.animator.SetFloat("x", normalized.x); this.animator.SetFloat("y", 0); } else if (normalized.y != 0) { this.animator.SetFloat("x", 0); this.animator.SetFloat("y", normalized.y); } } }
OnMove
はキーを離した場合にも移動量ゼロとして呼び出されるので、これを利用して最後の移動方向を記録しておき、Update()
の毎フレーム処理で実際のキャラ移動をするようにした
移動量は1フレームの経過時間に合わせて決まるよう、Time.deltaTime
を利用
さっそくお試し
前回はちょんちょん移動だったけど今回は押しっぱなしなのでスーッと滑らかに移動するようになった