十字キーで操作する際、斜めに移動したときだけ、少し速く動いてしまうことがあります。
横と縦の移動量をぞれぞれ1とすれば、斜めの移動量はおよそ1.4になります。
normalizedを使って、斜めのベクトル正規化し、1に変換する必要があります。
normalizedによる正規化
Cubeを作成し、リジッドボディを追加。
UseGravityのチェックを外しておきます。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed; Rigidbody rb; void Start() { speed = 5.0f; rb = GetComponent<Rigidbody>(); } void Update() { float moveX= Input.GetAxis("Horizontal"); float moveY= Input.GetAxis("Vertical"); Vector3 position = new Vector3(moveX, moveY, 0); rb.velocity = position.normalized * speed; Debug.Log(rb.velocity); } } |
ゲームプレイしてみましょう。
十字キー操作で、斜め移動しても、上下移動と同じ速さになっています。
三平方の定理から、斜めのベクトルは√2。すなわち1.414…です。
Debug.Logでコンソールを見てみると、斜め移動のとき、XとYの値は3.5に。
5 ÷ 1.414… = 約3.5
よこ、たての移動量が5に対し、斜めは正規化された数値3.5で移動していることがわかります。