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

如何使用InputActionPhase?Unity新输入系统暂停菜单无法关闭求助

Unity新输入系统暂停菜单无法关闭的修复方案

问题根源

  1. Time.timeScale=0导致输入事件丢失:游戏暂停时Time.timeScale设为0,Unity新输入系统默认依赖缩放后的时间更新,按键抬起的Canceled阶段事件可能无法被正确捕获,进而无法触发Resume逻辑。
  2. UI输入映射未绑定暂停按键:暂停后切换到UI输入组,但如果UI组未绑定相同的暂停触发按键,即使按下按键也无法触发回调。

修复步骤

1. 修改输入回调的阶段判断

将Canceled阶段改为Performed阶段,Performed是按键按下完成时的事件,不受timeScale影响,更适合暂停/继续的切换逻辑:

private bool _onPaused = false;

public void OnPause(InputAction.CallbackContext context)
{
    if(context.phase == InputActionPhase.Performed)
    {
        if (!_onPaused)
        {
            Paused();
        }
        else
        {
            Resume();
        }
    }
}

2. 为UI输入组绑定暂停按键

打开你的输入动作资源(.inputactions文件),在UI输入映射下添加与Player组相同的Pause动作,绑定同一个触发按键(比如Escape键)。确保暂停后UI输入启用时,能捕获到按键事件触发回调。

3. 调整Resume方法的执行顺序(可选)

先恢复时间缩放,再切换输入组,确保输入系统能正常更新:

private void Resume()
{
    Time.timeScale = 1.0f;
    _playerInputActions.UI.Disable();
    _playerInputActions.Player.Enable();
    _menu.SetActive(false);
    _onPaused = false;
}

4. 验证PlayerInput组件设置

检查场景中的PlayerInput组件:

  • 确认Action Maps包含Player和UI两组
  • 确保Behavior设置为Send Messages或Invoke Unity Events,保证能正确调用OnPause方法

内容的提问来源于stack exchange,提问作者Nikolay Stuff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:23:24