Menu
CoddyTech

对角线速度

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 27 课,共 85 课。

同时按住向右和向上的箭头键,原始轴向量会给出方向 (1, 0, 1)。它的长度,即 .magnitude,是 1 + 1 的平方根,约为 1.41。用它移动的行走者,在斜向移动时所用的时间内能走 1.41 个单位,而直线向前只能走 1 个单位:速度快了 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 上。

按下 Play 并同时按住两个方向键:行走者斜向移动的速度不会比直线移动更快。然后点击“检查”。

亲手试试

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // 方向键或 WASD:沿 x 轴和 z 轴移动,斜向移动时速度也相同。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器