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

Unity 2021.3.15f1中如何修改ESC键默认关闭游戏为暂停到菜单?

在Unity 2021.3.15f1中修改ESC键行为:替换退出为暂停菜单

为什么找不到"Exit on Suspend"选项

这个选项仅针对UWP/Windows Store平台,Windows Standalone等常规PC平台没有该设置。Unity默认在Standalone平台下会把ESC键映射为退出游戏的快捷操作,这才是问题的根源。

解决步骤

1. 禁用ESC的默认退出行为

有两种方式可以实现:

  • 通过输入管理器修改:
    1. 打开Edit > Project Settings > Input Manager
    2. 在Axes列表中找到Cancel轴(默认绑定了ESC键)
    3. 将Negative Button字段清空,或者替换为你不需要的按键,这样Unity就不会再响应ESC的默认退出指令
  • 通过代码拦截:
    在全局脚本中监听ESC按键,优先处理自定义逻辑,避免默认退出触发(适合需要保留Cancel轴其他用途的场景)

2. 实现暂停与菜单功能

创建一个C#脚本(比如PauseMenu.cs),挂载到场景中的持久化物体(如Canvas或空物体)上,示例代码如下:

using UnityEngine;
using UnityEngine.UI;

public class PauseMenu : MonoBehaviour
{
    public GameObject pauseMenuUI; // 拖入你的暂停菜单UI对象
    private bool isPaused = false;

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

    void TogglePause()
    {
        isPaused = !isPaused;
        pauseMenuUI.SetActive(isPaused);
        
        // 控制时间流速实现暂停
        Time.timeScale = isPaused ? 0f : 1f;
        
        // 锁定/解锁光标,避免暂停时鼠标乱跑
        Cursor.lockState = isPaused ? CursorLockMode.None : CursorLockMode.Locked;
        Cursor.visible = isPaused;
    }

    // 供菜单按钮调用的恢复游戏方法
    public void ResumeGame()
    {
        TogglePause();
    }
}

额外注意事项

  • 如果游戏中有依赖Time.timeScale的逻辑(如动画、粒子系统),可以将它们的Update改为FixedUpdate,或者单独设置animator.updateMode = AnimatorUpdateMode.UnscaledTime来保证暂停时仍能正常运行
  • 测试时请使用Standalone构建运行,Unity编辑器中按下ESC可能仍会触发退出编辑模式,这是编辑器的默认行为,打包后不会出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:51:04