Unity VR游戏Input System重绑定等待按键时游戏冻结问题
解决Unity VR按键重绑时游戏冻结的问题
核心原因是PerformInteractiveRebinding()默认会阻塞主线程等待输入,而VR的画面渲染、头姿跟踪都依赖主线程运行,所以导致头显响应停滞。以下是具体修复方案:
1. 启用异步重绑定模式
调用重绑API时开启后台异步模式,避免阻塞主线程。同时可以添加取消动作和超时机制,完善交互逻辑。修改后的代码如下:
public void Rebind(string _actionName, Button _pressedButton) { InputAction _toBeRebound = currentPlayerInput.currentActionMap[_actionName]; // 重绑前先禁用原动作,避免触发原有逻辑 _toBeRebound.Disable(); _toBeRebound.PerformInteractiveRebinding() // 允许指定动作终止重绑(比如菜单返回键) .WithCancelingThrough(currentPlayerInput.currentActionMap["Cancel"]) // 设置超时,防止无限等待 .WithTimeout(10f) // 关键:开启后台异步运行,不阻塞主线程 .RunInBackground() .OnComplete(_callback => { _pressedButton.GetComponentInChildren<TMP_Text>().text = _callback.action.bindings[0].effectivePath; Debug.Log("rebound successfully"); // 重绑完成后恢复动作启用状态 _toBeRebound.Enable(); _callback.Dispose(); }) .OnCancel(_callback => { Debug.Log("rebind canceled"); _toBeRebound.Enable(); _callback.Dispose(); }) .Start(); SaveKeybinds(); }
2. 额外优化建议
- 重绑等待期间,给UI添加明确提示(比如“按下新按键或按返回取消”),提升用户体验。
- 重绑开始时暂时禁用其他无关输入动作,避免误操作;重绑结束后恢复。
- 确保重绑相关的回调逻辑精简,不在主线程执行耗时操作,避免影响VR渲染和跟踪。
内容的提问来源于stack exchange,提问作者yusefwilson
相关产品推荐
相关产品推荐

