在Unity中如何制作2D移动游戏的游戏内功能菜单?
Unity2D跨场景菜单实现解决方案
核心原因说明
你遇到的菜单消失问题,本质是Unity切换场景时默认会销毁当前场景内的所有GameObject,放在关卡场景内的菜单自然会跟着被卸载。
推荐实现方案
方案1:DontDestroyOnLoad全局持久化菜单(适配你的需求,实现成本最低)
- 第一步:将菜单UI整体抽成独立预制体,包含点击启动响应区域、商店按钮、设置按钮三个核心模块
- 第二步:给菜单根节点挂载专属管理脚本
GlobalMenuManager.cs,添加如下代码保证菜单跨场景不销毁且不会重复生成:
public class GlobalMenuManager : MonoBehaviour { // 菜单主面板,在Inspector中拖拽赋值 public GameObject mainMenuPanel; private static GlobalMenuManager _instance; void Awake() { if (_instance == null) { _instance = this; // 跨场景不销毁 DontDestroyOnLoad(gameObject); } else { // 避免重复生成菜单 Destroy(gameObject); } } }
- 第三步:将菜单预制体放在游戏启动的初始场景中,后续所有关卡场景不要重复放菜单。游戏启动时默认显示菜单主面板,添加点击/触摸检测逻辑:
void Update() { // 仅菜单显示时响应点击 if (mainMenuPanel.activeSelf) { // 同时兼容PC点击和移动端触摸 bool isTrigger = Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began); if (isTrigger) { // 隐藏主菜单 mainMenuPanel.SetActive(false); // 加载第一关,已有关卡就直接启动游戏逻辑 // SceneManager.LoadScene("Level1", LoadSceneMode.Single); } } }
- 第四步:给商店、设置按钮绑定对应点击事件,点击时弹出对应子面板即可,不会影响当前关卡运行。
方案2:叠加加载菜单场景(适合UI分层复杂的中大型项目)
- 将菜单单独做一个独立的场景,游戏启动时同时加载初始关卡场景和菜单场景,菜单场景用
LoadSceneMode.Additive模式加载 - 切换关卡时仅卸载关卡对应的场景,保留菜单场景,也能实现菜单跨场景不消失的效果。
参考效果

内容的提问来源于stack exchange,提问作者infamora
相关产品推荐
相关产品推荐

