如何使用Unity的new input system

前言:之前网上搜索的教程杂七杂八的,感觉很烧脑,对于只用过Input.GetKeyDown的人来说太过陌生了

工作环境:Unity2021.3.21f1c1

【万事先有头】安装new input system:

弹窗重启,确认:

【废话少说,实现一个Input.GetKeyDown(KeyCode.Space)一样的操作】:

旧操作系统在Update里操作,不多赘述。在new input system里,我们想要获取这个按键状态首先需要创建一个input action事件。


双击打开我们的input action,我们可以看到一个面板

首先添加一个action maps,当你添加成功后会自动给你创建一个action,我们给这个action命名为space

这时候我们看这个action的type类型为button,错不了,就是我们想要的,这时候我们点击space左边那个三角形展开这个action,可以看到no binding,意思是我们这个事件还没有绑定任何东西呢,也监测不出来任何东西的按下。

这时我们看到右边的Binding里有一栏Path,选择我们想要的space。

【至此,我们一个类似在update里创建的事件就已经被我们在面板里被创建了。】此时我们已经完成了50%的工作了,莫急,再使用它就行了,嗷,记得点保存:

此时我们看看project里这个input action被我们添加了一个space按键事件。

【有了家伙,该如何使用呢】创建一个脚本TestInputSystem.cs,随你叫啥:

  1. .started:当输入动作开始时触发。例如,当用户按下键盘上的一个键或者点击鼠标按钮时。

  2. .performed:当输入动作执行时触发。这通常发生在输入动作的激活阶段,比如键盘按键按下的期间或者鼠标按钮按下的期间。

  3. .canceled:当输入动作取消时触发。例如,当用户释放键盘上的一个键或者松开鼠标按钮时。

using UnityEngine;

using UnityEngine.InputSystem; // 添加new input system的命名空间

public class TestInputSystem : MonoBehaviour

{

    public InputActionProperty spaceKey; // 定义的space事件需要被添加进来

    void Start()

    {

        // input.getkeydown

        spaceKey.action.started += ctx => Debug.Log("Space key started");

        spaceKey.action.performed += ctx => Debug.Log("Space key pressed");

        // input.getkeyup

        spaceKey.action.canceled += ctx => Debug.Log("Space key started");

    }

}

把代码拖到你的测试场景去。

这个input action reference就选择我们刚才space action啦。

【别心急,你以为这样就好了嘛,99%了,还差1%】:再创建一个TestInputAction.cs脚本用来激活我们的input action事件。
 

using UnityEngine;

using UnityEngine.InputSystem;

public class TestInputAction : MonoBehaviour

{

    public InputActionAsset testAction;

    void OnEnable()

    {

        testAction.Enable();

    }

}

至此已完成操作。


---------------------------------------------------------------------------------------------------------------------------------

【还是嫌太麻烦了?一个脚本也能搞定】

using UnityEngine;

using UnityEngine.InputSystem;

public class TestInputAction : MonoBehaviour

{

    // public InputActionAsset testAction;

    void OnEnable()

    {

        // testAction.Enable();

        // 假设有一个名为 "Jump" 的输入动作

        InputAction jumpAction = new InputAction("Jump", binding: "<keyboard>/space");

        jumpAction.started += OnJumpStarted;

        jumpAction.performed += OnJumpPerformed;

        jumpAction.canceled += OnJumpCanceled;

        jumpAction.Enable();

    }

    private void OnDisable()

    {

        // 当禁用组件时,确保注销回调并禁用输入动作

        Debug.Log("jump out");

    }

    private void OnJumpStarted(InputAction.CallbackContext context)

    {

        // 处理跳跃开始的逻辑

        Debug.Log("jump");

    }

    private void OnJumpPerformed(InputAction.CallbackContext context)

    {

        // 处理跳跃执行期间的逻辑

        Debug.Log("jumping");

    }

    private void OnJumpCanceled(InputAction.CallbackContext context)

    {

        // 处理跳跃取消的逻辑

        Debug.Log("jumped");

    }

}

将这一个脚本拖拽到你的测试场景即可。

跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)内容概要:本文围绕跟网型逆变器的小干扰稳定性展开分析,重点研究其在电力系统中的动态响应特性及控制策略优化问题。通过构建基于Simulink的仿真模型,对逆变器在不同工况下的小信号稳定性进行建模与分析,识别系统可能存在的振荡风险,并提出相应的控制优化方法以提升系统稳定性和动态性能。研究内容涵盖数学建模、稳定性判据分析、控制器设计与参数优化,并结合仿真验证所提策略的有效性,为新能源并网系统的稳定运行提供理论支持和技术参考。; 适合人群:具备电力电子、自动控制或电力系统相关背景,熟悉Matlab/Simulink仿真工具,从事新能源并网、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 分析跟网型逆变器在弱电网条件下的小干扰稳定性问题;② 设计并优化逆变器外环与内环控制器以提升系统阻尼特性;③ 利用Simulink搭建仿真模型验证理论分析与控制策略的有效性;④ 支持科研论文撰写、课题研究或工程项目中的稳定性评估与改进。; 阅读建议:建议读者结合文中提供的Simulink仿真模型,深入理解状态空间建模、特征值分析及控制器设计过程,重点关注控制参数变化对系统极点分布的影响,并通过动手仿真加深对小干扰稳定性机理的认识。
<think>首先,用户的问题是:“我想查找在Unity使用New Input System绑定游戏手柄的方法。请问Unity New Input System 绑定游戏手柄的方法?”这是一个关于Unity游戏开发的具体查询。 我的角色是回答用户的问题,基于系统指令。系统级指令包括: - 所有行内数学表达式必须使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如 `[^数字]`。 用户提供了三个引用: - 引用[1]:关键词列表,提到Unity New Input System相关术语。 - 引用[2]:解释为什么要更新到InputSystem,提到Unity 2020版本推出新输入系统。 - 引用[3]:关于导入和配置InputSystem的简要说明,以及代码监听输入的前置知识。 用户还说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但我没有看到用户上一次的问题历史;这是一个新的交互,所以我会专注于当前问题和提供的引用。 核心问题是如何在Unity New Input System中绑定游戏手柄。引用中没有直接给出绑定游戏手柄的具体方法,但引用[3]提到了代码监听InputSystem输入,这可能相关。 为了回答这个问题,我需要基于我的知识提供准确的指导。Unity New Input System 使用 Input Actions 和 Input Action Maps 来处理输入。 回顾步骤: 1. **导入和配置InputSystem**:引用[3]提到导入Input System包和在Player Settings中启用它。 2. **创建Input Actions**:用户需要定义输入动作,比如游戏手柄按钮。 3. **绑定游戏手柄**:具体到游戏手柄,需要设置输入绑定到游戏手柄控件。 标准方法: - 在Unity编辑器中,创建Input Action Asset。 - 定义Actions,如"Move"或"Jump"。 - 为每个Action添加绑定,选择游戏手柄控件,如Gamepad left stick for movement or buttons. 代码示例也可以提供,但引用[3]提到代码监听输入,所以我应该包括代码部分。 回答结构: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 末尾生成相关问题。 - 引用段落末尾添加引用标识。既然引用是用户提供的,我应该自然地引用它们,如果适用。 引用用户提供的引用: - 例如,提到为什么要用New Input System时,引用[2]。 - 提到导入配置时,引用[3]。 具体步骤: 1. **导入Input System包**:参考引用[3]。 2. **创建Input Action Asset**。 3. **配置游戏手柄绑定**。 4. **在代码中使用**:监听输入。 生成相关问题: - 基于主题,如性能问题、优化、应用场景等。 最终回答大纲: - 介绍:简要说明方法。 - 步骤:详细步骤。 - 代码示例:如果需要。 - 相关问题。 确保LaTeX语法:用户问题中没有涉及数学表达式,但系统指令说所有行内数学表达式必须用$...$。在这个上下文中,可能没有数学内容,所以不需要添加。 生成相关问题:指令要求“生成相关问题”,所以末尾添加几行相关问题。 </think>### Unity New Input System 绑定游戏手柄的方法 在 Unity使用 New Input System 绑定游戏手柄,主要涉及创建输入动作(Input Actions)和配置绑定(Bindings)。New Input System 提供了灵活的方式来处理多种输入设备(包括游戏手柄),支持跨平台兼容性。以下是基于用户引用信息和 Unity 官方文档的详细步骤。整个过程分为配置、绑定创建和代码实现三个阶段,确保可靠性和易用性[^2][^3]。 #### 步骤 1: 导入和配置 Input System(参考引用[3]) 首先,确保 Unity 项目中已安装并启用 Input System 包: - 打开 Unity 编辑器,导航到 **Window > Package Manager**。 - 在 Unity Registry 列表中找到 **Input System**,点击 **Install**。Unity 2020+ 或 Unity 6 版本通常已默认包含此包。 - 配置输入模式:转到 **File > Build Settings > Player Settings > Other Settings > Active Input Handling**。选择 **Input System Package (New)** 或 **Both**(兼容旧版 InputManager)。如果修改此设置,Unity 编辑器会自动重启以应用更改。 这一步让 Unity 支持新输入系统,便于处理游戏手柄等设备[^3]。 #### 步骤 2: 创建 Input Action Asset 并绑定游戏手柄 Input Action Asset 是定义所有输入动作的核心文件。以下是创建游戏手柄绑定的详细流程: 1. **创建 Input Action Asset**: - 在 Project 窗口右键,选择 **Create > Input Actions**。命名为 "GamepadControls"。 - 双击打开 Input Action Asset,进入 Input Action Editor(Unity 内置工具)。 2. **定义 Action Maps 和 Actions**: - Action Maps 用于分组输入逻辑(如 "PlayerControls")。添加一个名为 "Gamepad" 的 Action Map。 - 在 "Gamepad" Map 中,添加 Actions(例如 "Move" 用于移动, "Jump" 用于跳跃)。每个 Action 代表一个游戏手柄输入事件。 3. **绑定游戏手柄控件**: - 为每个 Action 添加 Bindings。例如: - 选择 "Move" Action,点击 "+" 添加绑定。 - 在 Path 字段中,选择 **\<Gamepad>/leftStick**(对应手柄左摇杆)。这会自动关联到所有兼容的游戏手柄(如 Xbox、PS4)。 - 类似地,为 "Jump" Action 添加绑定,选择 **\<Gamepad>/buttonSouth**(对应手柄 A 键或 X 键)。 - 处理绑定冲突:如果多个设备触发同一 Action,可在 Binding Properties 中设置 **Processor**(如 "Stick Deadzone" 防止误触)或优先级。引用[1]提到绑定冲突可通过 Processor 或 Action Phase 调整,确保输入稳定[^1]。 4. **保存和测试**: - 保存 Input Action Asset。在编辑器中,切换到 Play 模式,使用手柄测试输入是否响应。Unity 自动检测常见手柄类型(无需额外驱动)。 #### 步骤 3: 在代码中监听游戏手柄输入(参考引用[3]) 通过 C# 脚本实现输入监听。以下是简化示例,使用 UnityEvent 或 C# 事件处理游戏手柄输入: ```csharp using UnityEngine; using UnityEngine.InputSystem; public class GamepadInputHandler : MonoBehaviour { // 引用 Input Action Asset public InputActionAsset inputActions; private InputAction moveAction; private InputAction jumpAction; void Start() { // 初始化 Actions moveAction = inputActions.FindAction("Gamepad/Move"); jumpAction = inputActions.FindAction("Gamepad/Jump"); // 启用 Actions moveAction.Enable(); jumpAction.Enable(); // 绑定事件监听器 moveAction.performed += ctx => OnMove(ctx.ReadValue<Vector2>()); jumpAction.performed += ctx => OnJump(); } void OnMove(Vector2 direction) { // 处理移动逻辑,direction 为摇杆输入值 Debug.Log($"Move: {direction}"); } void OnJump() { // 处理跳跃逻辑 Debug.Log("Jump pressed"); } void OnDestroy() { // 清理资源 moveAction.Disable(); jumpAction.Disable(); } } ``` - **关键点**: - `InputAction.ReadValue<Vector2>()` 读取摇杆等向量输入。 - 使用 `performed` 事件监听按钮按压或摇杆移动。 - 如果需要处理多手柄冲突(如多个玩家),引用[1]提到的 `PlayerInput` 类可管理多设备输入状态[^1]。 #### 注意事项 - **兼容性**:New Input System 支持主流游戏手柄(Xbox、PS、Switch)。如果手柄未被识别,检查 Unity 输入调试器( **Window > Analysis > Input Debugger** )。 - **迁移提示**:对于旧项目,引用[2]建议 New Input System 更适合多设备项目,但如果 InputManager 已满足需求,无需强制迁移[^2]。 - **性能优化**:避免在 Update() 中频繁查询输入,改用事件驱动方法减少开销。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值