什么是 Input System
Input System 是 Unity 官方推出的新一代输入控制系统,旨在替代原有的 Input Manager。
它提供了更强大、更灵活的输入管理方式。
Edit → Project Settings → Player → Active Input Handling可以更改,默认是使用新的,如果选择使用新的就无法使用老的了,我这里选择 both(同时支持新旧输入系统)。

如何使用
其实非常的简单。
两步走。
- 创建 Input Actions
- 建立脚本,调用
创建 Input Actions


然后注意把这个新的设定为 Project-wide Input Actions,这样才能起效,同时换而言之也就是说如果有多个 Input Actions,只有这个设定为 Project-wide 的才能使用。

添加一个 Action Maps,接着是 Actions。
Action Maps 用于将不同的 Action 进行分组,方便管理和切换不同的控制方案。方便整体切换例如:战斗模式与驾驶模式的切换。
而 Action 是具体的输入操作,例如按键绑定之类的。

我们需要实现角色移动功能,可以将 Action Type 设置为 Value。这个是比较合适的。

Control Type 用于指定 Action 的数据类型,这里选择 Vector2,表示一个二维向量,用于存储水平和垂直方向的输入值。也就是存储前后左右。

接着添加具体的映射,也就是这个上下左右。第一个是按键的触发,就是按一下按键,第二个更符合我们的需要,也就是移动。

点一下多了四个按下的图标,然后看 binding,有个 path,点击 listen 就可以根据你当前的按键输入显示按键,方便找寻。
设置好后,别忘记保存,点击右上角的 save asset。

也可以设成 auto-save,自动保存。
参考
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.14/manual/index.html
参考上面的官方文档。
或者是已经在项目中自动创建的 InputSystem_Actions。

写相关代码
写一个控制脚本。
using UnityEngine.InputSystem 这一步调用这个 Input System。
接着在主类中加上:
InputAction moveAction;
void Start()
{
//当开始的时候获取这个Move,这里的 Move Action 对应的是我们之前创建的名为 Move 的 Action。当然你可以任意改名字。比如说YiDong
moveAction = InputSystem.actions.FindAction("Move");
}
接着写移动的逻辑:
void Update()
{
//读取moveAction里面的值
Vector2 vector2 = moveAction.ReadValue<Vector2>();
//我使用的3D模板,所以实际上的Vector3,就把这个vector2里面的值传到Vector对应的位置。
Vector3 move = new Vector3(vector2.x, 0, vector2.y) * Time.deltaTime;
//然后用transfor中的Translate方法,把位置传入第一个参数中,实现移动。
transform.Translate(move, Space.World);
}这样就通过新的移动系统实现了移动。