斜め移動の速度
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 27/85。
右矢印キーと上矢印キーを同時に押すと、未加工の軸から方向 (1, 0, 1) が得られます。その長さである .magnitude は、1 + 1 の平方根で、約 1.41 です。この方向に動く歩行者は、まっすぐ進んで 1 単位進む時間で、斜めに 1.41 単位進みます。つまり、41%速くなります。
.normalized は、同じ方向を向き、長さがちょうど 1 単位のベクトルのコピーを返します。(1, 0, 1) は約 (0.71, 0, 0.71) に、(0, 0, 5) は (0, 0, 1) になります。速度を掛けると、どの方向でもその速度で移動します。このハチは、花が遠くても近くても、毎秒 2 単位の速さで花に向かって飛びます。.normalized がないと、花が遠いほど速く飛んでしまいます。
public Vector3 flower = new Vector3(4, 1, 3);
public float speed = 2f;
void Update()
{
Vector3 toFlower = flower - transform.position;
transform.position += toFlower.normalized * speed * Time.deltaTime;
}Vector3.zero.normalized は (0, 0, 0) のままです。ゼロには方向がないためです。v.normalized は v を元のままにします。v.Normalize() は v 自体を変更します。
チャレンジ
簡単斜め方向でもウォーカーが同じ速度で動くようにします。
Update()内で、Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));を作成します。direction.normalized * speed * Time.deltaTimeをtransform.positionに加えます。
「プレイ」を押して、矢印キーを2つ押し続けます。ウォーカーは直進時より速くならずに斜めに進みます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Walker : MonoBehaviour
{
public float speed = 4f;
void Update()
{
// 矢印キーまたはWASD:x軸とz軸に沿ってspeedで移動し、斜め方向でも同じ速度にする。
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド