前言
很多小伙伴看见新输入系统就头疼,被它界面上的各种参数搞晕,别怕!本文将使用详细的步骤,让你一步步深入了解新输入系统,爱上新输入系统!
本篇幅较长,如果可以认真看完,尤其是对于新手,将会有很大帮助!
一、为什么使用新输入系统?
1. 用起来方便
- 覆盖全场景硬件:支持键盘、鼠标、手柄、触屏等,无需第三方插件;
- 跨平台:同一套输入配置(Input Action Asset),可直接用于多个平台,无需为不同平台单独写输入逻辑
2. 逻辑和输入解耦
旧系统会将 "输入绑定与代码强耦合"(如硬编码Input.GetKey(KeyCode.W)),也就是说,玩家需要做某件事(例如空格键跳跃),竟然还需要关心按哪个键,这明显会和输入系统强耦合。
- 动作与硬件分离:用 "动作(Action)" 定义功能,通过可视化配置完成,后续换按键无需改代码,仅需调整配置
- 模块化管理:通过 "动作映射(Action Map)" 分组输入,切换场景 / 状态时只需启用 / 禁用对应映射(如进入 UI 界面时禁用玩家控制映射,避免误操作)
3. 可以精准控制输入
旧系统在输入精度上存在明显局限(如无法区分 "按键按下" 和 "按键持续按住"),而新系统支持细粒度的输入状态控制:
- 支持 "按下(started)""持续(performed)""松开(canceled)" 三个阶段
- 例如:"started" 阶段触发开枪动画,"performed" 阶段持续发射(长按),"canceled" 阶段停止发射
- 蓄力技能:"performed" 阶段累计蓄力值,"canceled" 阶段释放技能
4. 性能更高
旧系统依赖 "每帧轮询"(如在Update中反复调用Input.GetKey),即使没有输入也会执行检测,存在冗余性能消耗
- 按需触发:例如 "Move" 动作仅在按下 / 松开 / 持续按住时触发performed/canceled回调,无输入时不执行任何代码
- 回调逻辑更清晰:复杂输入(如 "Shift+W 冲刺""Ctrl + 鼠标右键瞄准")可通过 "组合绑定"+"事件回调" 实现,无需在Update中写多层if判断
二、新输入系统的安装和必要配置
1. 打开 Package Manager
在 Unity 编辑器顶部菜单栏,依次点击 Window > Package Manager,打开包管理窗口,将 "Packages" 下拉菜单切换为 Unity Registry

2. 搜索并安装 Input System
搜索框输入 "Input System"。找到对应包后,点击右侧的 "Install" 按钮,我这里已经安装。

3.更改 PlayerSettings 设置
在 Unity 编辑器顶部菜单栏,依次点击 Edit > Project Settings,打开项目设置窗口。在左侧导航栏中选择 Player 选项,展开"Other Settings",找到 "Active Input Handling" 设置项



- Input System Package (New):仅启用新输入系统,完全禁用旧系统 API,新项目使用,能最大化发挥新系统性能
- Input Manager (Old):仅启用旧系统,新系统功能失效
- Both:同时启用新旧系统,会增加内存占用,且可能出现输入冲突
这里我们选择 Input System Package (New),此时出现一个弹窗,因为编辑器要重启才能应用,我们点击 " Apply "

三、新建输入配置文件
新输入系统的所有输入逻辑都围绕 "Input Action Asset"(输入动作资源)展开,这是存储输入映射、设备绑定的核心文件,创建步骤如下:
1. 创建 Input Action Asset
在 Project 窗口空白处右键,依次选择 Create > Input Action ,生成一个默认名为 "New Input Action Asset" 的文件

如果你是使用的编辑器是unity6.0及其之后的版本,工程会自动创建一个Input Action Asset,如图:

四、核心结构讲解
在这里我们先理解核心结构,然后我们在[实战篇]进行手动实操,其实实战篇还没写,嘿嘿嘿~
我们使用的编辑器版本是unity6,以他自动创建的为例讲解。双击进入输入动作编辑窗口,核心结构分为 3 层:

++最高层 Action Maps(动作映射) --- 输入动作( Actions**)的容器**++
-
主要作用:用于分组管理、方便在不同游戏状态下统一 "启用 / 禁用"、避免输入冲突。
-
每一个Action Maps 下都可以创建多个 Actions(动作)
-
这里工程为我们自动创建了 Player 和 UI 两个 Action Maps.
右键 Action Maps面板可以创建新的 Action Map,此时发现 Actions 面板自动为我们创建了一个新动作

++第二层 Actions(动作)--- 定义交互逻辑++
-
代表具体的输入行为,如 "Move" 控制移动,"Jump" 控制跳跃,"Attack" 控制攻击
-
是包含在 Action Maps 下的具体的输入
右键 Action 面板可以创建新的 Action,此时发现 Actions 面板自动为我们创建了一个新动作

++第三层 Action Properties(动作属性面板)--- 输入动作(Actions)的精细化配置++
当选择 Action 面板的某一个 Action,可以看到此面板

仔细观察这个面板,发现有三个部分:
第一部分:Action**(动作类型)**

这里又分为Action Type 和 Control Type,很多小伙伴读到这里可能已经感到厌倦了,莫急!虽然这里的面板看起来很复杂,但是用起来是有套路的.
Action Type ,动作是哪种类型
-
Value:值类型,用于需要 "持续读取数值" 的输入,例如玩家的移动 -
Button:**按钮类型,**用于 "离散事件触发",例如攻击跳跃按下时触发一次 -
Pass Through:**直通类型,**非常少用,知道有这个东西即可 -
我们想一想就能明白,游戏中的输入无非就
Value和Button这两者
Control Type(控制类型)

-
只有我们选择 Action Type 为 value(值类型)的时候才会出现,因为如果选择
Button(按钮类型),控制类型就是 Button 嘛 -
别看这里的控制类型种类非常多,但是在实际开发中,用的最多的就只有几个,这里拿 Axis 和 Vector 2 举例
-
Axis : 模拟单轴的输入,如手柄摇杆的 X/Y 轴、鼠标滚轮,返回 -1 ~ 1区间的 float 值
-
Vector 2:二维向量输入,可以把他想象成一个二维坐标系,
-
当按下键盘的 w 键时返回(0,1)
-
当按下键盘的 s 键时返回(0,-1)
-
当按下键盘的 a 键时返回(-1,0)
-
当按下键盘的 d键时返回(1,0)
-
当同时按下wd 时返回(1,1),以此类推
-
第二部分:Interactions(交互)

Hold(按住 / 蓄力)
一般是为 Button类型(按钮)添加
想象游戏中的交互场景,例如长按 E 0.5s拾取某个物体,长按鼠标左键0.5s蓄力重击,就需要添加这个

-
Press Point(按压阈值),表示输入需要 "按压到多大程度",才会开始判定,一般用于手柄
-
Hold Time(按住时长),表示需要持续按住至少多少秒,"Hold" 交互才会真正触发,例如,蓄力至少0.5s才能释放重击
Press(按下)
包含三个阶段:
-
Started:按下瞬间触发; -
Performed:按下持续过程中持续触发; -
Canceled:松开瞬间触发。
例如瞄准(按下右键时开始瞄准,按住时保持瞄准,松开时退出瞄准)
第三部分:Processors(处理器)
作用:在输入值传递给游戏逻辑前,对其进行 "预处理"
-
Axis Deadzone(轴死区) :
过滤手柄摇杆、方向盘等 "模拟设备" 的微小漂移。比如摇杆没动,但设备有轻微信号波动时,把这类 "小到可以忽略" 的输入直接当成 0,防止角色 "自动乱飘"。
-
Clamp(范围限制) :
把输入值 "夹" 在最小 - 最大范围里。比如希望角色移动速度最多到 10、最少到 0,用它就能把输入值限制在这个区间,避免数值失控。
-
Invert(反转) :
把输入值的正负反过来。比如原本按 W 键是 "向前"(输入正方向),用它后按 W 键就变成 "向后"(输入负方向),适合 "反向控制" 的场景。
-
Normalize(归一化) :
把输入的向量长度统一为 1。比如手柄斜着推摇杆时,原本 x/y 值的组合会让移动速度比 "正推" 更快,用它后不管怎么推,移动速度都一致。
-
Scale(缩放) :
给输入值乘以一个系数,调整 "灵敏度"。比如手柄太灵敏,就乘以 0.5 降低效果;太迟钝,就乘以 2 放大效果。
第四层 Binding Properties (用于绑定按键和添加后处理)
当在 Action 面板新建一个 Action时,展开后可以发现自动新建了一个空绑定,即该动作目前没有绑定任何按键

步骤1:确定 Action 的类别
上文提到过,Action 无非就两种类别,Value 和 Button
这里 MyMove 代表玩家移动,明显应该选择 Value 类型,我们将要绑定 wasd 和上下左右箭头
例如 Attack 这种表示玩家攻击,明显应该选择Button 类型
Control Type 选择 Vector2是因为对于3D玩家,一般只在xz平面移动,所以只需要二维向量即可表示出玩家的移动方向

步骤2:确定要绑定按键的类型
1.我们删除自动创建的空绑定,因为他不符合我们的要求

2.点击 MyMove右边的 + 号,选择第二个选项,这里解释一下四个绑定类型的作用

-
Add Binding(添加基础绑定)
-
作用:给动作绑定单个硬件输入(如键盘按键、鼠标按钮、手柄摇杆等)。
-
场景:简单的 "单键触发" 场景,比如 "跳跃" 动作绑定 "空格键"、"攻击" 动作绑定 "鼠标左键"。
-
-
Add Up\Down\Left\Right Composite(添加上下左右组合绑定)
-
作用:一次性创建四个方向(上、下、左、右)的子绑定,最终输出一个**
Vector2**类型的 "方向向量"。 -
场景:需要 "二维方向输入" 的场景(如角色移动)。例如:
-
给 "移动" 动作添加该组合绑定后,可分别为 "Up" 绑定
W键、"Down" 绑定S键、"Left" 绑定A键、"Right" 绑定D键; -
最终动作会输出
Vector2值(比如按W时输出(0,1),按A时输出(-1,0)),直接用于控制角色方向。
-
-
-
Add Binding With One Modifier(添加带 1 个修饰键的绑定)
-
作用:需要 修饰键 + 主按键组合 才触发的输入。"修饰键" 通常是
Shift、Ctrl、Alt -
场景:比如 "冲刺移动" 需要 "按住
Shift+ 方向键" 才生效。此时,Shift是 "修饰键",方向键是 "主键",只有两者同时满足,动作才会触发
-
-
Add Binding With Two Modifiers(添加带 2 个修饰键的绑定)
- 类似上者三者同时满足才会触发动作
3.这里我们选择第二个,绑定展开后可以看到 2D Vector 下有四个空绑定


步骤3:绑定按键
1.我们将 2D Vector 改名为 WASD (键盘F2改名),然后选择 "Up"这个空绑定,点击右侧 Binding Properties 面板的 Path 按钮

2.点击 Listen 按钮,可以监听我们当前设备的输入

3.此时按下键盘的 W,可以看到出现了 W[Keyboard],代表监听成功

4.选择后发现 W 已经绑定到当前动作下

5.我们依次把键盘的 S、 A、D分别绑定到 Down、Left、Right下

太棒了!!!学到这里,你已经学会了最基础的按键绑定,这是实现wasd移动的基础
有时候我们还需要键盘的上下左右箭头控制移动,功能和wsad一样,只是绑定的按键不一样,我们把它实现
6.我们还是选择第二个选项,改名为 Arrow key


7.我们依次把键盘的 ↑、 ↓、←、→分别绑定到 Up、Down、Left、Right 绑定下,完成!

为 Button 类型的 Action 添加绑定
步骤1中我们确定了 Action 类别为 Value,如果我想为玩家添加一个交互动作,比如按 E ,该怎么做呢?
1.创建一个 Action,改名为 MyInteract, Action Type 改为 Button


2.为其绑定按键为 E


3.如果还想添加另一个按键绑定,例如按 F,怎么做呢?
我们选择第一个选项,然后重复以上步骤


整体概况:

保存InputAction资产
点击右上角 Save Asset,也可以点击 Auto - Save 自动保存

恭喜你!成功看完了这一篇文章,怎么样?新输入系统是不是没有想象中的那么复杂呢?相信你已经对新输入系统的使用有个基本的了解,接下来我会写一篇【新输入系统】实战篇,教大家在代码中使用咱们设置好的这些动作,拜拜~(◍・ᴗ・◍)✧*。