> 技术文档 > Unity Project Settings - Input Manager设置说明_unity 如何完全禁用旧input系统

Unity Project Settings - Input Manager设置说明_unity 如何完全禁用旧input系统


旧版输入系统 (Input Manager)

在 Unity 的 Project Settings > Input Manager 中,您可以配置各种输入轴。以下是旧版输入系统的设置项说明:

设置项 类型 描述 默认值 使用建议 Name 字符串 输入轴的名称,在代码中通过此名称访问输入 “Horizontal” 使用清晰、一致的命名规范 Descriptive Name 字符串 在输入配置界面显示的正向名称 “Right” 描述输入的正向操作 Descriptive Negative Name 字符串 在输入配置界面显示的负向名称 “Left” 描述输入的负向操作 Negative Button 字符串 触发负向输入的按钮 “left” 使用标准按键名称 Positive Button 字符串 触发正向输入的按钮 “right” 使用标准按键名称 Alt Negative Button 字符串 备用的负向输入按钮 “a” 提供备选控制方案 Alt Positive Button 字符串 备用的正向输入按钮 “d” 提供备选控制方案 Gravity 浮点数 输入值归零的速度 3 值越高,松开按键后归零越快 Dead 浮点数 死区范围,小于此值的输入将被忽略 0.001 避免控制器微小移动造成误操作 Sensitivity 浮点数 输入响应速度 3 值越高,响应越快 Snap 布尔值 当按下相反方向按钮时是否立即归零 √ 推荐开启以获得更精确的控制 Invert 布尔值 是否反转输入方向 □ 根据控制需求决定 Type 下拉菜单 输入类型:
• Key or Mouse Button
• Mouse Movement
• Joystick Axis Key or Mouse Button 根据输入设备选择 Axis 下拉菜单 输入轴类型:
• X/Y/Z轴
• 鼠标滚轮
• 游戏杆轴 X axis 根据输入设备选择 Joy Num 下拉菜单 游戏控制器编号:
• All Joysticks
• Joystick 1-8 All Joysticks 多玩家游戏需区分控制器

旧版输入系统代码示例

// 获取水平输入float horizontal = Input.GetAxis(\"Horizontal\");// 获取垂直输入float vertical = Input.GetAxis(\"Vertical\");// 检测跳跃按键if(Input.GetButtonDown(\"Jump\")) { // 执行跳跃}

新版输入系统 (Input System Package)

Unity 的新版输入系统需要单独安装 Input System Package,提供更强大和灵活的输入处理方式。

安装与设置

  1. 通过 Package Manager 安装 “Input System”
  2. 在 Project Settings > Player > Other Settings 中启用 “Active Input Handling” 为 “New” 或 “Both”

核心概念

概念 描述 示例 Input Actions 定义游戏中的输入动作 “Move”, “Jump”, “Attack” Action Maps 输入动作的分组 “Player”, “UI”, “Vehicle” Bindings 将输入设备映射到动作 键盘W键 -> “Move/Forward” Control Schemes 不同设备的控制方案 “KeyboardMouse”, “Gamepad” Processors 输入数据的处理方式 “Normalize”, “Scale”, “Invert” Interactions 定义输入交互方式 “Press”, “Hold”, “Tap”

输入动作设置 (Input Actions Asset)

设置项 描述 使用建议 Action Type 动作类型:
• Value: 连续值(如摇杆)
• Button: 按键状态
• Pass-Through: 直接传递输入 根据输入类型选择 Control Type 输入控制类型:
• Button
• Axis
• Vector2
• etc. 匹配输入设备类型 Binding 输入源绑定 为不同设备添加多个绑定 Path 输入设备路径 如\"/space\" Processors 输入处理器 如\"Normalize\"处理摇杆输入 Interactions 输入交互方式 如\"Hold\"长按检测

输入系统设置 (Project Settings > Input System Package)

设置项 描述 默认值 建议 Update Mode 输入更新模式 Dynamic Update 保持默认 Background Behavior 应用后台时的输入处理 Reset And Disable All Actions 根据游戏类型调整 Compensate For Screen Orientation 补偿屏幕方向 √ 移动设备建议开启 Default Deadzone Min 默认最小死区 0.125 控制器建议0.2 Default Deadzone Max 默认最大死区 0.925 控制器建议0.8 Default Button Press Point 按钮触发点 0.5 根据设备调整 Default Tap Time 点击时间阈值 0.2 保持默认 Default Slow Tap Time 长按时间阈值 0.5 根据需求调整 Default Hold Time 按住时间阈值 0.4 保持默认 Multi-Tap Delay Time 多次点击延迟 0.2 保持默认 Supported Devices 支持的输入设备 所有设备 限制设备以优化性能

新版输入系统代码示例

using UnityEngine;using UnityEngine.InputSystem;public class PlayerController : MonoBehaviour{ private PlayerInput playerInput; private InputAction moveAction; private void Awake() { playerInput = GetComponent(); moveAction = playerInput.actions[\"Move\"]; } private void OnEnable() { moveAction.performed += HandleMove; playerInput.actions[\"Jump\"].performed += HandleJump; } private void OnDisable() { moveAction.performed -= HandleMove; playerInput.actions[\"Jump\"].performed -= HandleJump; } private void HandleMove(InputAction.CallbackContext context) { Vector2 movement = context.ReadValue(); // 处理移动逻辑 } private void HandleJump(InputAction.CallbackContext context) { // 执行跳跃 } private void Update() { // 直接读取输入值 Vector2 moveInput = moveAction.ReadValue(); }}

输入系统选择建议

特性 旧版输入系统 新版输入系统 学习曲线 简单 中等 功能扩展 有限 强大 多设备支持 基础 全面 输入重绑定 手动实现 内置支持 多人输入 复杂 简单 VR/AR支持 有限 优秀 移动设备支持 基础 高级 项目类型 小型/简单项目 中大型/复杂项目

最佳实践

  1. 统一输入处理

public interface IInputHandler{ Vector2 GetMovement(); bool IsJumpPressed(); // 其他输入方法}
  1. 输入设备检测

string currentControlScheme = playerInput.currentControlScheme;if(currentControlScheme == \"KeyboardMouse\"){ // PC特定控制}else if(currentControlScheme == \"Gamepad\"){ // 手柄特定控制}
  1. 输入重绑定

// 重绑定按键var rebindOperation = moveAction.PerformInteractiveRebinding() .WithControlsExcluding(\"Mouse\") .OnMatchWaitForAnother(0.1f) .Start();
  1. 输入事件优先级

// 使用Input System的事件优先级void OnGUI(){ if(Event.current.type == EventType.KeyDown && Keyboard.current.escapeKey.wasPressedThisFrame) { // 处理ESC键 Event.current.Use(); // 阻止事件传播 }}

常见问题解决

  1. 输入无响应

  • 检查输入系统是否启用
  • 确认输入动作绑定正确
  • 验证事件监听是否注册
  1. 手柄死区问题

// 添加死区处理器moveAction.AddBinding(\"/leftStick\") .WithProcessor(\"deadzone(min=0.125,max=0.925)\");
  1. 多平台适配

  • 使用Control Schemes区分设备
  • 为不同设备创建单独的动作映射
  • 运行时动态切换控制方案
  1. 输入冲突

  • 使用Action Maps分离不同上下文
  • 在UI打开时禁用玩家输入
  • playerInput.SwitchCurrentActionMap(\"UI\");

根据项目需求选择合适的输入系统,小型项目可使用旧版系统快速开发,中大型项目推荐使用新版输入系统以获得更好的灵活性和扩展性。