文章来自官方指南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 Manager (UnityEngine.Input
) ,新版Input System处于未启用状态。这样保证现存的Unity项目能像以前一样继续工作。
当你安装Input System组件时,Unity会询问你是否启用新的框架。如果你选择Yes,Unity会启用新的框架并且禁用旧的,之后编辑器将重新启动。
这个项目正在使用新的Input System组件,但是当前player settings并未启动新的框架。这意味着并不会有来自任何的本机设备输入。是否启用新框架?这么做会重启编辑器并禁用旧的UnityEngine.Input所有API。
你可以在Player settings里(Edit > Project Settings > Player,里的Active Input Handling)找到相应的设置。你可以随时修改这里的设置,这样做依然会重启编辑器。
注意:你可以把Active Input Handling 设置为 Both同时启用旧版和新版输入系统。
启用新的输入框架后,会将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以将其导入到当前项目中。
更多复杂的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 System的一个专有名词,意为一个“输入行为”。
通过下列步骤从Input Action直接获取输入:
PlayerInput
组件PlayerInput
组件直接从输入设备中获取输入方便又快捷,但是需要为每个不同类型的设备不同的路径。这也使得以后更难更改哪个设备控制触发游戏中的特定事件。
为了解决这个问题,你可以使用Action作为中介,作为设备与游戏事件之间的桥梁。最简单的方法是使用PlayerInput
组件。要添加此组件,请单击 GameObject Inspector 中的 Add Component 按钮:
每个PlayerInput
组件代表游戏里的一名玩家。要接收输入,该组件必须要连接到一系列的Input Action中。为该组件创建一个Action系列最快捷的的方法是点击位于Inspector窗口中的**Create Actions…**按钮。这将创建一个预先配置有一组默认Input Action Map、Input Action、Input Binding的资产。
当您单击Create Actions按钮时,Unity 会询问你在哪里创建新资产。在项目的Assets文件夹中选择一个路径(或使用默认值),然后选择Okay。这会在您的项目中创建一个新的.inputactions格式的文件,将其连接到PlayerInput组件,并打开.inputactions文件的编辑器窗口。
你可以修改默认设置以满足你的项目需要。有关如何使用此窗口的说明,请参阅Action编辑器的更深入的文档。
一旦组件拥有它的Action后,你必须为每一个Action设置相应的响应。你可以在PlayerInput
的Inspector窗口里通过修改Behavior属性以多种方式设置响应。
在通知行为文档中获取该选项更详细的设置。上面的截图中选中了Invoke Unity Events,它以与Unity UI一样的方式使用UnityEvent
。 Unity为每一个连接到组件的Action显示一个事件。这允许你为每个事件直接连接它的目标方法。
每个方法带有一个InputAction.CallbackContext
参数,该参数允许访问触发的Action和这个Action的值。有关更多信息,请参阅文档Action回调。
public class MyPlayerScript : MonoBehaviour
{
public void Fire(InputAction.CallbackContext context)
{
Debug.Log("Fire!");
}
}
这样就完成了使用PlayerInput
的基础设置。
除了通过PlayerInput
设置Input Action,还有很多其他方法。有关更多信息,请参阅文档创建Action。
更新中……