You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:21:08