对角线速度
本课属于 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 本身。
挑战
简单让行走者在斜向移动时保持相同的速度。
- 在
Update()中,构建Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));。 - 将
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 在线编辑器