Menu
CoddyTech

斜め移動の速度

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 自体を変更します。

challenge icon

チャレンジ

簡単

斜め方向でもウォーカーが同じ速度で動くようにします。

  1. Update()内で、Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));を作成します。
  2. 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プレイグラウンド