跳转至

译注:相关链接尚未完善,访问时可能遭遇 404,你可以先 查看原文

工作流概述 - 直接读取设备状态

Workflow-Direct.png

这是最简单、最直接的输入工作流,但灵活性也最低。它绕过了 输入动作编辑器,因此你无法享受 动作 附带的额外功能。

如果你想快速实现单一类型的设备输入,这可能会很有用。但如果你想为用户提供多种类型的输入,或者你的目标是支持多个平台,这通常不是最佳选择。

你可以引用设备的 控件(Control) 并读取它们当前的值,代码如下所示:

using UnityEngine;
using UnityEngine.InputSystem;

public class MyPlayerScript : MonoBehaviour
{
    void Update()
    {
        var gamepad = Gamepad.current;
        if (gamepad == null)
        {
            return; // 没有连接游戏手柄。
        }

        if (gamepad.rightTrigger.wasPressedThisFrame)
        {
            // 在此编写“使用”代码
        }

        Vector2 move = gamepad.leftStick.ReadValue();
        {
            // 在此编写“移动”代码
        }
    }
}

上面的示例直接读取了当前连接的 游戏手柄 的右扳机键和左摇杆的值。你的游戏或应用中的概念性动作(例如“移动”和“使用”)不取决于输入系统的“Action”,而取决于你的代码逻辑是如何响应这些输入的。你可以对其他输入设备类型使用相同的方法,例如 键盘 鼠标

优缺点

这可能是用代码来处理输入最快的方法,但它的灵活性最低,因为在你的代码与特定设备的值之间没有任何抽象层。

如果你选择使用这种技术:

你可以在输入系统包(Input System package)附带的示例项目中找到此工作流的示例。请在项目(Project)窗口中,查看 Assets > Samples > SimpleDemo,然后打开场景:SimpleDemo_UsingState

有关输入系统支持的设备的更多信息,以及用于读取其状态的 API,请参阅 支持的设备

有关更灵活的工作流,请参阅 动作工作流