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

场景重启后QuitPopup引用丢失无法加载问题求助

问题原因与解决建议

问题原因

场景重启(调用SceneManager.LoadScene("GameScene"))时,原场景内的所有对象(包括旧的QuitPopupController和GameController)都会被销毁,新场景会生成全新的实例。但GameController的quitPopup是手动在Inspector面板赋值的公共字段,场景重启后这个引用不会自动指向新生成的QuitPopupController,导致引用为空,按下Esc键时无法触发弹窗逻辑。

解决方法

  • 方案1:利用单例直接调用(最简洁)
    既然QuitPopupController已经实现了单例,直接在GameController里通过单例调用方法,完全摆脱对Inspector赋值的依赖:
    修改GameController.cs的Update方法:

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
            QuitPopupController.Instance?.ExecuteQuitPopup();
    }
    

    注:?.是空安全调用运算符,防止场景初始化时Instance还未赋值导致空引用错误。

  • 方案2:自动查找组件,避免手动赋值
    在GameController的初始化方法中自动查找场景中的QuitPopupController,即使场景重启也能重新获取引用:
    修改GameController.cs:

    [Header("QuitPopup")]
    public QuitPopupController quitPopup;
    
    void Awake()
    {
        // 未手动赋值时,自动查找场景中的QuitPopupController
        if (quitPopup == null)
        {
            quitPopup = FindObjectOfType<QuitPopupController>();
        }
    }
    
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
            quitPopup?.ExecuteQuitPopup();
    }
    
  • 方案3:优化单例实现,避免多实例问题
    你的QuitPopupController在Awake和Start都给Instance赋值,容易出现逻辑混乱,建议只在Awake中初始化单例,并添加多实例判断:
    修改QuitPopupController.cs的Awake方法:

    private void Awake()
    {
        // 确保场景中只有一个QuitPopupController实例
        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
        }
        else
        {
            Instance = this;
        }
    }
    
  • 额外优化:移除重复的输入判断
    你的ExecuteQuitPopup方法里重复判断了Input.GetKeyDown(KeyCode.Escape),但这个方法已经是在GameController检测到Esc按下时才调用的,完全可以去掉这个冗余判断:

    public void ExecuteQuitPopup()
    {
        if (GameController.Instance != null && GameController.Instance.IsAnimationRunning) return;
    
        if (popupPanel != null && popupPanel.activeSelf)
            ResumeGame();
        else
            Show();
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:44:54