跳转至

快速入门指南

本页简要介绍了如何快速开始使用输入系统(Input System)。输入系统提供了 多种工作流,你可以根据它们的优缺点来选择。本快速入门指南举例的工作流适用于大多数常见场景。

首先,安装输入系统包。有关如何安装新输入系统的信息,请参阅 安装指南

为当前项目创建并分配默认动作

输入系统将你的输入配置保存在动作资产(Actions Asset)中。首次安装输入系统包时,你必须创建一个动作资产。

只需要依次点击主菜单的 编辑(Edit) > 项目设置(Project Settings) > 输入系统包(Input System Package) > 输入动作(Input Actions),然后点击为当前项目创建并分配默认动作资产(Create and assign a default project-wide Action Asset)按钮。

InputSettingsNoProjectWideAsset.png

查看并编辑默认输入设置

在为当前项目创建并分配了一些动作之后,你可以通过输入动作设置(Input Actions Settings)窗口来查看和编辑你的输入配置。

ProjectSettingsInputActionsSimpleShot.png 此输入动作设置窗口显示了一些默认的动作

你可以使用此窗口查看这些动作(Actions),以了解它们的名称(names)、值类型(value types)以及相应的绑定(bindings)。你也可以在这里编辑、删除或添加新的动作。

查阅输入动作设置窗口的更多功能。

默认动作表与动作

动作表(Action Maps)可以用于将动作分成组,这些分组代表了不同的场合。同时混用不同场合(动作表)中的动作是没有意义的。

输入系统的默认配置附带了两个动作表:“Player(玩家)”和“UI(用户界面)”。它们分别包含一些常用于游戏玩法和 UI 交互的默认动作。

“Player”动作表定义了几个与游戏相关的动作,如“Move(移动)”“Look(查看)”“Jump(跳跃)”和“Attack(攻击)”动作。而“UI”动作表则定义了几个与用户界面相关的动作,如“Navigate(导航)”“Submit(确认)”和“Cancel(取消)”。

每个默认动作都绑定了多种不同类型的控件(Control)。例如:

  • “Move”动作绑定了键盘的“WSAD”键和方向键、手柄的摇杆,以及 XR 控制器上的主 2D 轴。

  • “Jump”动作绑定了空格键、手柄上的“下”方向按钮,以及 XR 控制器上的次要按钮。

获取默认动作的值

输入系统预先配置了一些默认动作,如“Move”“Jump”等,它们适用于许多常见的应用程序和游戏场景。这些配置能读取大多数外设(如键盘、鼠标、游戏手柄、触摸屏和 XR 设备)的输入。

这意味着在很多情况下,你无需任何配置即可直接开始使用输入系统编写脚本。

使用该工作流的步骤如下:

  1. 在脚本顶部添加输入系统的 using 语句。

  2. 创建变量用于存储动作引用(Action references)。

  3. Start() 方法中,查找并存储动作引用。

  4. Update() 方法中,从动作引用读取值,并添加你自己的代码以做出相应的响应。

以下示例脚本展示了这些步骤:

using UnityEngine;
using UnityEngine.InputSystem;  // 1. 输入系统的 "using" 语句

public class Example : MonoBehaviour
{
    // 2. 这些变量用于保存动作引用
    InputAction moveAction;
    InputAction jumpAction;

    private void Start()
    {
        // 3. 查找 "Move" 和 "Jump" 动作的引用
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        // 4. 读取 "Move" 动作的值,它是一个 Vector2
        // 并且读取 "Jump" 动作的状态,它是一个 bool

        Vector2 moveValue = moveAction.ReadValue<Vector2>();
        // 在此处编写你的移动代码

        if (jumpAction.IsPressed())
        {
            // 在此处编写你的跳跃代码
        }
    }
}

脚本中名为“Move”和“Jump”的动作开箱即用,无需任何配置,因为输入系统包中已经预配置了这些默认名称。

提示

不同类型的动作具有不同的值类型,因此访问其值的方法也有所不同。在上面的示例中,你可以看到我们使用了 .ReadValue<Vector2>() 来读取 2D 轴的值,而使用了 .IsPressed() 来读取按钮状态。

如果你在不同的动作表中创建了多个同名的动作,在使用 FindAction 时必须同时指定动作表名称和动作名称,并用 / 分隔。例如:InputSystem.actions.FindAction("Player/Move")