Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)

文章来自官方指南Installation guide | Input System | 1.1.0-pre.5 (unity.cn)

安装指南

本篇介绍了如何安装和启用Input System组件到你的Unity项目中。

注意:新版Input System组件要求Unity版本高于2019.4,.NET 4运行时。如果项目使用旧的.NET 3.5运行时,组件将不会生效。

安装组件

打开Unity Package Manager(菜单Window > Package Manager),在列表里选择Input System,之后点击Install安装。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第1张图片

启用新的输入框架(backend,翻译成框架更好理解)

Unity默认使用传统的Input Manager (UnityEngine.Input) ,新版Input System处于未启用状态。这样保证现存的Unity项目能像以前一样继续工作。

当你安装Input System组件时,Unity会询问你是否启用新的框架。如果你选择Yes,Unity会启用新的框架并且禁用旧的,之后编辑器将重新启动。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第2张图片

这个项目正在使用新的Input System组件,但是当前player settings并未启动新的框架。这意味着并不会有来自任何的本机设备输入。是否启用新框架?这么做会重启编辑器并禁用旧的UnityEngine.Input所有API。

你可以在Player settings里(Edit > Project Settings > Player,里的Active Input Handling)找到相应的设置。你可以随时修改这里的设置,这样做依然会重启编辑器。

注意:你可以把Active Input Handling 设置为 Both同时启用旧版和新版输入系统。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第3张图片

启用新的输入框架后,会将C#的#define(宏定义) ENABLE_INPUT_SYSTEM=1 添加到构建中。同样,当启用旧的输入框架时,会添加#define ENABLE_LEGACY_INPUT_MANAGER=1。因为两者可以同时启用,所以两个宏定义可能同时启用。

安装示例

Input System组件带有许多示例。你可以直接从Unity中的Package Manager窗口(Window > Package Manager)安装。样本位于Package Manager窗口中选择Input System包后展示的列表中。单击示例旁边的Import into Project以将其导入到当前项目中。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第4张图片

更多复杂的Input System demo项目,可以查看GitHub仓库InputSystem_Warriors。

快速入门指南

直接从输入设备获取输入

最快开始的方法就是从脚本里直接读取输入设备的当前状态。例如,下面的代码获取了玩家最后使用的手柄,并且读取了它的当前状态。

using UnityEngine;
using UnityEngine.InputSystem;

public class MyPlayerScript : MonoBehaviour
{
    void FixedUpdate()
    {
        var gamepad = Gamepad.current;
        if (gamepad == null)
            return; // No gamepad connected.

        if (gamepad.rightTrigger.wasPressedThisFrame)
        {
            // 'Use' code here
        }

        Vector2 move = gamepad.leftStick.ReadValue();
        // 'Move' code here
    }
}

这个方法同样适用于其他的设备类型(例如,Keyboard.current或者Mouse.current

间接地从Input Action获取输入

Input Action为Input System的一个专有名词,意为一个“输入行为”。

通过下列步骤从Input Action直接获取输入:

  1. 添加PlayerInput组件
  2. 创建Action
  3. 在脚本中编写Action响应

步骤 1: 添加PlayerInput组件

直接从输入设备中获取输入方便又快捷,但是需要为每个不同类型的设备不同的路径。这也使得以后更难更改哪个设备控制触发游戏中的特定事件。

为了解决这个问题,你可以使用Action作为中介,作为设备与游戏事件之间的桥梁。最简单的方法是使用PlayerInput组件。要添加此组件,请单击 GameObject Inspector 中的 Add Component 按钮:

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第5张图片

步骤2 创建Input Action

每个PlayerInput组件代表游戏里的一名玩家。要接收输入,该组件必须要连接到一系列的Input Action中。为该组件创建一个Action系列最快捷的的方法是点击位于Inspector窗口中的**Create Actions…**按钮。这将创建一个预先配置有一组默认Input Action Map、Input Action、Input Binding的资产。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第6张图片

当您单击Create Actions按钮时,Unity 会询问你在哪里创建新资产。在项目的Assets文件夹中选择一个路径(或使用默认值),然后选择Okay。这会在您的项目中创建一个新的.inputactions格式的文件,将其连接到PlayerInput组件,并打开.inputactions文件的编辑器窗口。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第7张图片

你可以修改默认设置以满足你的项目需要。有关如何使用此窗口的说明,请参阅Action编辑器的更深入的文档。

步骤3 设置Action响应

一旦组件拥有它的Action后,你必须为每一个Action设置相应的响应。你可以在PlayerInput的Inspector窗口里通过修改Behavior属性以多种方式设置响应。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第8张图片

在通知行为文档中获取该选项更详细的设置。上面的截图中选中了Invoke Unity Events,它以与Unity UI一样的方式使用UnityEvent。 Unity为每一个连接到组件的Action显示一个事件。这允许你为每个事件直接连接它的目标方法。

Unity 新版输入系统Input System 1.1.0-pre.5官方指南翻译(自翻)_第9张图片

每个方法带有一个InputAction.CallbackContext参数,该参数允许访问触发的Action和这个Action的值。有关更多信息,请参阅文档Action回调。

public class MyPlayerScript : MonoBehaviour
{
    public void Fire(InputAction.CallbackContext context)
    {
        Debug.Log("Fire!");
    }
}

这样就完成了使用PlayerInput的基础设置。

另一个设置Input Action的方法

除了通过PlayerInput设置Input Action,还有很多其他方法。有关更多信息,请参阅文档创建Action。

我要如何做才能…?

…检查一帧中是否按下空格?

…找出所有连接的手柄?

…获取玩家当前在使用的手柄?

…知道是否一个新设备接入?

…创建一个简单的射击类型的Action?

更新中……

你可能感兴趣的:(Unity研究,unity,c#)