Menu
CoddyTech

轴

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

Input.GetAxis("Horizontal") 会把左、右方向键(以及 A 和 D)转换成 -1 到 1 之间的一个数:向左为 -1,向右为 1,都不按为 0。Input.GetAxis("Vertical") 对下、上方向键(S 和 W)也会进行相同的转换。一次调用就能替代两个 if,而且游戏手柄摇杆也可以驱动相同的轴,无需额外代码。

这个数值不会突然跳变。使用 Unity 的默认设置时,它会以每秒 3 的速度逐渐接近目标值,因此按下按键后,需要三分之一秒才能达到 1;松开按键后,也需要三分之一秒才能回到 0。这样平滑的变化会让这辆气垫船逐渐加速,并慢慢停下来:

public float speed = 5f;

void Update()
{
    float h = Input.GetAxis("Horizontal");
    transform.position += new Vector3(h * speed * Time.deltaTime, 0, 0);
}

Input.GetAxisRaw("Horizontal") 会跳过平滑变化:每一帧的值都恰好是 -1、0 或 1,因此移动会立即开始或停止。需要有重量感的操作时使用 GetAxis,需要灵敏、利落的控制时使用 GetAxisRaw。同时按住两个方向键时,无论使用哪一个,结果都是 0,因为两个方向会相互抵消。(在 Unity 6 项目中,“使用按键控制”中的 Active Input Handling 设置也适用于这些轴。)

challenge icon

挑战

简单

让探测车行驶得干脆利落,不要缓动。

  1. 在 Update() 中,读取 float h = Input.GetAxisRaw("Horizontal"); 和 float v = Input.GetAxisRaw("Vertical");。
  2. 将 new Vector3(h * speed * Time.deltaTime, 0, v * speed * Time.deltaTime) 加到 transform.position 上。

按“开始”,点击游戏画面,然后用方向键或 WASD 驾驶:探测车会立即启动和停止。然后点击“检查”。

亲手试试

using UnityEngine;

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

    void Update()
    {
        // Horizontal 沿 x 轴移动,Vertical 沿 z 轴移动,没有平滑过渡。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器