什么是 Input System

Input System 是 Unity 官方推出的新一代输入控制系统,旨在替代原有的 Input Manager。

它提供了更强大、更灵活的输入管理方式。

Edit Project Settings Player Active Input Handling可以更改,默认是使用新的,如果选择使用新的就无法使用老的了,我这里选择 both(同时支持新旧输入系统)。

如何使用

其实非常的简单。

两步走。

  1. 创建 Input Actions
  2. 建立脚本,调用

创建 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);
 	}

这样就通过新的移动系统实现了移动。