Unity新输入系统如何实现旧系统GetButton的持续触发功能?
嘿,刚好对新输入系统的这个点挺熟的,给你分享两种能完美复刻旧系统Update+GetButton持续触发逻辑的方法,看你习惯哪种:
方法1:事件驱动式(新输入系统官方推荐)
这种方式不用死盯Update,靠输入动作的状态回调来标记触发状态,更贴合新系统的设计思路:
- 先在你的
.inputactions输入资产里创建一个动作(比如叫HoldAction),绑定到你需要的按键/按钮上 - 在脚本里通过状态标记来控制
Update里的持续操作,代码示例:
using UnityEngine; using UnityEngine.InputSystem; public class HoldActionExample : MonoBehaviour { // 在Inspector面板拖入你创建的InputAction public InputAction holdAction; private bool isHolding; private void OnEnable() { // 按键按下时标记为触发中 holdAction.started += ctx => isHolding = true; // 按键抬起时取消标记 holdAction.canceled += ctx => isHolding = false; // 启用这个输入动作 holdAction.Enable(); } private void OnDisable() { // 一定要解绑事件+禁用动作,避免内存泄漏 holdAction.started -= ctx => isHolding = true; holdAction.canceled -= ctx => isHolding = false; holdAction.Disable(); } private void Update() { if (isHolding) { // 这里写你需要持续执行的操作 Debug.Log("按钮按住中,持续触发逻辑"); } } }
方法2:类旧系统的Update轮询法(最直观的复刻)
如果你习惯了旧系统的写法,新输入系统也支持直接在Update里读取按钮的持续状态,和GetButton几乎一模一样:
方式A:直接用InputAction实例
using UnityEngine; using UnityEngine.InputSystem; public class HoldActionExample : MonoBehaviour { public InputAction holdAction; private void OnEnable() { holdAction.Enable(); } private void OnDisable() { holdAction.Disable(); } private void Update() { // 这句完全等价于旧系统的GetButton("xxx") if (holdAction.ReadValueAsButton()) { // 按住期间持续执行的操作 Debug.Log("持续触发中"); } } }
方式B:用生成的输入类(更简洁)
如果你在输入资产的设置里勾选了「Generate C# Class」,可以直接用自动生成的静态类来访问输入,代码更清爽:
using UnityEngine; public class HoldActionExample : MonoBehaviour { private PlayerInputActions inputActions; // 这里的PlayerInputActions是你生成的类名 private void OnEnable() { inputActions ??= new PlayerInputActions(); inputActions.Default.Enable(); // Default是你的动作映射名称 } private void OnDisable() { inputActions?.Default.Disable(); } private void Update() { // 直接访问生成类里的动作,检查是否按住 if (inputActions.Default.HoldAction.ReadValueAsButton()) { // 持续执行操作 Debug.Log("按钮按住中"); } } }
小提醒
- 不管用哪种方法,都要记得在
OnEnable/OnDisable里启用/禁用输入动作,不然会出现输入无响应或者内存泄漏的问题 - 事件驱动的方式在复杂输入场景(比如多设备切换、自定义绑定)下更高效,推荐优先使用
内容的提问来源于stack exchange,提问作者fastbyte22
相关产品推荐
相关产品推荐

