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

Unity暂停菜单Resume按钮二次点击才恢复角色移动问题求助

问题分析与解决方案

你的问题核心是首次点击Resume按钮恢复后角色无法移动,但Esc恢复和第二次Resume点击正常,这大概率是UI交互时的输入状态或UI对象控制方式导致的,以下是具体修复步骤:

1. 替换Canvas组件控制为GameObject激活状态控制

你当前是通过启用/禁用Canvas组件来显示/隐藏暂停界面,这种方式容易导致UI事件系统残留状态,建议改为控制Canvas GameObject的激活状态:

修改脚本如下:

using UnityEngine;
using UnityEngine.SceneManagement;

public class PauseGame : MonoBehaviour
{
    public GameObject Canvas;
    bool pausedGame = false;

    void Start()
    {
        // 禁用整个Canvas对象,而非组件
        Canvas.SetActive(false);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            TogglePause();
        }
    }

    // 抽离暂停逻辑,避免重复代码
    void TogglePause()
    {
        pausedGame = !pausedGame;
        Time.timeScale = pausedGame ? 0 : 1;
        Canvas.SetActive(pausedGame);
        
        // 处理光标状态(3D游戏必备)
        if (pausedGame)
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;
        }
        else
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;
            // 重置输入轴,清空残留输入状态
            Input.ResetInputAxes();
        }
    }

    public void Resume()
    {
        TogglePause();
    }

    public void MainMenu()
    {
        // 切换场景前恢复时间缩放,避免后续场景异常
        Time.timeScale = 1;
        SceneManager.LoadScene("MainMenu");
    }
}

2. 关键修复点说明

  • 使用SetActive替代组件enabled:控制整个UI对象的激活状态,能彻底暂停UI的事件响应,避免残留的交互状态干扰输入系统。
  • 抽离TogglePause逻辑:统一暂停/恢复的处理代码,彻底保证Esc和Resume按钮的执行逻辑完全同步,消除执行时机差异带来的问题。
  • 光标状态控制:暂停时解锁光标并显示,恢复时重新锁定,这是3D游戏暂停逻辑的标准操作,能避免光标在游戏窗口内导致的移动输入失效。
  • 重置输入轴:恢复时调用Input.ResetInputAxes(),清空所有残留的输入状态,确保角色移动能立即响应新的输入。

3. 额外检查项

  • 确认角色移动脚本没有依赖其他未同步的暂停状态变量,仅依赖Time.timeScale或脚本内的pausedGame变量。
  • 检查Resume按钮的OnClick事件是否正确绑定到PauseGame脚本的Resume方法,没有重复绑定或错误绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:49