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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:45:05