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

如何从主菜单返回游戏后重新激活背包等非活跃游戏对象

解决DontDestroyOnLoad背包系统场景切换激活问题

你的核心问题在于场景判断的时机和方式存在偏差:原代码直接用Scene对象比较可能因引用不一致导致判断失效,且未在游戏场景加载时执行激活逻辑。以下是两种可靠的解决方案:

方案一:监听场景加载完成事件(推荐)

在背包系统的脚本里订阅SceneManager.sceneLoaded事件,每次场景加载完成后精准处理状态切换,避免无效判断:

private void Awake()
{
    // 订阅场景加载完成事件
    SceneManager.sceneLoaded += OnSceneLoaded;
    // 初始化时先检查当前场景,避免启动时状态异常
    CheckSceneAndUpdateState();
}

private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    CheckSceneAndUpdateState();
}

private void CheckSceneAndUpdateState()
{
    bool isMainMenu = SceneManager.GetActiveScene().name == "MainMenu";
    
    // 主菜单场景禁用,游戏场景激活
    backpack.SetActive(!isMainMenu);
    buttonI.SetActive(!isMainMenu);
    canvas.SetActive(!isMainMenu);
    InventoryManager.SetActive(!isMainMenu);
    
    if (isMainMenu)
    {
        backpackAudio.Stop();
    }
    // 回到游戏场景时如需恢复音频可取消下方注释
    // else { backpackAudio.Play(); }
}

private void OnDestroy()
{
    // 销毁时取消订阅,防止内存泄漏
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

方案二:Update中实时检查(简单但略低效)

若不想用事件,可在Update中做场景判断,但需加状态判断避免重复调用:

private void Update()
{
    string currentScene = SceneManager.GetActiveScene().name;
    if (currentScene == "MainMenu")
    {
        // 仅当对象活跃时才禁用
        if (backpack.activeSelf)
        {
            backpack.SetActive(false);
            buttonI.SetActive(false);
            backpackAudio.Stop();
            canvas.SetActive(false);
            InventoryManager.SetActive(false);
        }
    }
    else
    {
        // 仅当对象非活跃时才激活
        if (!backpack.activeSelf)
        {
            backpack.SetActive(true);
            buttonI.SetActive(true);
            canvas.SetActive(true);
            InventoryManager.SetActive(true);
        }
    }
}

关于PlayerPrefs的说明

你的背包对象本身是DontDestroyOnLoad的,场景切换的状态属于临时状态,不需要持久化到本地,直接通过场景名称判断处理更简单高效,完全没必要用PlayerPrefs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:29:57