Unity 2021.3.15f1中如何修改ESC键默认关闭游戏为暂停到菜单?
在Unity 2021.3.15f1中修改ESC键行为:替换退出为暂停菜单
为什么找不到"Exit on Suspend"选项
这个选项仅针对UWP/Windows Store平台,Windows Standalone等常规PC平台没有该设置。Unity默认在Standalone平台下会把ESC键映射为退出游戏的快捷操作,这才是问题的根源。
解决步骤
1. 禁用ESC的默认退出行为
有两种方式可以实现:
- 通过输入管理器修改:
- 打开
Edit > Project Settings > Input Manager - 在
Axes列表中找到Cancel轴(默认绑定了ESC键) - 将
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
相关产品推荐
相关产品推荐

