当前位置: 首页 > news >正文

Unity Input System 技术文档(系统整理)

一、Input Actions 配置文件基础

1. Input Actions 是什么

Input Actions(.inputactions 文件)是 Unity 新 Input System 的核心配置文件,用于描述:

  • 行为(Action)
  • 行为映射(Action Map)
  • 控制方案(Control Scheme)
  • 设备与按键绑定

其目标是:行为驱动输入,而不是按键驱动输入


2. Input Actions 的基本结构

  • Action Maps:一组输入行为(如 Player、UI)
  • Actions:具体行为(Move / Look / Fire / Jump 等)
  • Bindings:某个行为对应的输入设备与按键

二、方式一:生成 C# 类并手动监听

1. 根据 Input Actions 生成 C# 代码

操作步骤:

  1. 选中 .inputactions 文件

  2. 在 Inspector 中设置:

    • Generate C# Class
    • 类名(如 Lesson9_Input
    • 命名空间(可选)
  3. Apply,生成对应的 C# 输入封装类

生成后:

  • 每个 Action Map → 一个属性
  • 每个 Action → 一个 InputAction

2. 使用生成的 C# 类监听输入

Lesson9_Input input;void Start()
{input = new Lesson9_Input();input.Enable();input.Action1.Fire.performed += (c) =>{Debug.Log("开火");};input.Action2.Space.performed += (c) =>{Debug.Log("跳跃");};
}void Update()
{Vector2 move = input.Action1.Move.ReadValue<Vector2>();Debug.Log(move);
}

3. 特点分析

优点

  • 代码可控性最高
  • 适合底层框架 / 输入系统封装

缺点

  • 需要手动 Enable / Disable
  • 事件注册与解绑需要自行管理

三、方式二:PlayerInput 组件概述

1. PlayerInput 是什么

PlayerInput 是 Input System 提供的高级输入组件,用于:

  • 自动解析 Input Actions
  • 自动管理设备分配
  • 自动调用响应函数

核心思想:配置驱动逻辑调用


2. PlayerInput 的基本使用流程

  1. 创建 Input Actions 文件
  2. 在玩家对象上添加 PlayerInput 组件
  3. 绑定 Input Actions
  4. 选择输入通知方式(Behavior)
  5. 编写对应的响应逻辑

3. PlayerInput 核心参数说明

Actions

  • 关联的 Input Actions 文件
  • Default Action Map:默认启用的行为映射
  • Default Control Scheme:默认控制方案

Camera

  • 本地多人分屏时用于指定摄像机

Behavior(重点)

决定 输入事件如何通知代码逻辑


四、PlayerInput 的四种事件通知模式

方式一:Send Messages

使用规则

  • 函数命名必须为:On + ActionName

  • 函数参数:

    • 无参数
    • InputValue
  • 脚本必须挂在 PlayerInput 同一对象

public void OnMove(InputValue value)
{Vector2 dir = value.Get<Vector2>();
}

特点

  • 最简单
  • 通过反射调用
  • 性能一般

⚠️ 注意:

  • InputValue 只有值发生变化时才会回调
  • 持续按键(如一直按 W)不会持续触发

方式二:Broadcast Messages

  • 规则与 SendMessage 完全一致

  • 区别:

    • 脚本可挂在 PlayerInput 对象 或其子对象

适合:

  • 角色逻辑分层的场景

方式三:Invoke Unity Events

使用方式

  • 在 PlayerInput 中选择 Invoke Unity Events
  • 在 Inspector 中拖拽方法
  • 方法参数必须是:
InputAction.CallbackContext
public void MyFire(InputAction.CallbackContext context)
{Debug.Log("Fire");
}

特点

  • 无反射
  • 可视化配置
  • 适合策划 / 非程序人员

方式四:Invoke C# Events(最强)

使用方式

PlayerInput input = GetComponent<PlayerInput>();input.onActionTriggered += OnActionTrigger;
input.onDeviceLost += OnDeviceLost;
input.onDeviceRegained += OnDeviceRegained;
input.onControlsChanged += OnControlsChanged;
public void OnActionTrigger(InputAction.CallbackContext context)
{switch (context.action.name){case "Move":Vector2 dir = context.ReadValue<Vector2>();break;case "Fire":Debug.Log("开火");break;}
}

特点

  • 不依赖字符串反射
  • 性能最好
  • 可集中处理所有输入
  • 工程级推荐方案

InputValue vs CallbackContext

对比项 InputValue CallbackContext
使用场景 Send / Broadcast UnityEvent / C# Event
是否持续
可读信息
推荐程度 一般 强烈推荐

五、PlayerInputManager(本地多人)

1. PlayerInputManager 的作用

  • 管理 本地多人输入

  • 处理:

    • 玩家加入
    • 玩家离开
    • 设备分配

常用于:

  • 本地合作游戏
  • 本地对战游戏

2. 核心参数说明

Join Behavior

  • Join Players When Button Is Pressed
  • Join Players When Join Action Is Triggered
  • Join Players Manually

Player Prefab

  • 必须挂载 PlayerInput 组件

Split Screen

  • Enable Split Screen
  • Maintain Aspect Ratio
  • Fixed Number

3. 使用示例

PlayerInputManager.instance.onPlayerJoined += (player) =>
{Debug.Log("创建一个玩家");
};PlayerInputManager.instance.onPlayerLeft += (player) =>
{Debug.Log("离开一个玩家");
};

六、推荐使用方案总结

场景 推荐方案
单人游戏 PlayerInput + Invoke C# Events
本地多人 PlayerInputManager + PlayerInput
框架层 生成 C# 类手动监听
快速原型 Send / Unity Events

七、核心设计思想总结

  1. 行为优先,而不是按键优先
  2. 配置驱动,而不是代码硬编码
  3. 输入与逻辑解耦
  4. 支持多设备、多玩家扩展

http://www.jsqmd.com/news/177401/

相关文章:

  • YOLOFuse依赖库列表公开:PyTorch、OpenCV等具体版本信息
  • YOLOFuse考古勘探辅助:地表下结构热分布异常探测
  • 2025年市面上有实力的防雨箱供应厂家排行,八角监控杆/太阳能监控杆/龙门架监控杆/以撒控制台,防雨箱生产厂家联系电话 - 品牌推荐师
  • YOLOFuse WebAssembly尝试:浏览器内运行的可能性探讨
  • 网络工程毕业设计简单的开题指导
  • YOLOFuse GitHub开源地址分享:欢迎Star支持社区发展
  • YOLOFuse抖音快手短视频运营:吸引年轻开发者群体
  • YOLOFuse个性化推荐系统整合
  • YOLOFuse未来更新方向:是否会支持更多传感器模态?
  • Unity 新 Input System 学习笔记
  • 金包银选购不踩坑?认准材质与售后,这家更靠谱!
  • YOLOFuse车载夜视辅助系统原型:提升驾驶安全性
  • YOLOFuse技术博客推荐:深入理解多模态目标检测原理与实现
  • YOLOFuse开源协议说明:可商用吗?是否允许二次开发?
  • 2025必备!8个一键生成论文工具,专科生轻松搞定毕业论文!
  • YOLOFuse工业质检创新:高温部件缺陷检测新方法
  • 【ComfyUI 加速】Z-image-Nunchaku 整合包分享解压即用|4G 低显存可用 支持文生图速度直接提升3倍 极速生成实测与完整教程
  • YOLOFuse专利申请基础:核心技术可作为发明点提炼
  • YOLOFuse推理演示教程:三步查看双模态检测结果图片
  • YOLOFuse支持LLVIP数据集预训练,开箱即用于夜间行人检测
  • YOLOFuse竞赛参赛利器:Kaggle多模态挑战赛加速器
  • 2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址
  • TPU+C语言协同设计精髓(多核任务负载均衡实战方案)
  • YOLOFuse支持HTML报告生成?训练结果可交互展示吗?
  • 洛谷 B4452:[GESP202512 四级] 优先购买 ← 结构体排序
  • 【并行计算高手进阶必备】:深入剖析OpenMP 5.3负载均衡底层原理
  • 代码安全新战场:WASM混淆为何让黑客束手无策?
  • 【嵌入式系统可靠性提升】:基于C语言的存算一体错误检测与恢复机制详解
  • YOLOFuse issue模板规范:提问前请按格式填写环境信息
  • Pixso国产替代:团队协作设计DDColor品牌视觉体系