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

Unity使用DontDestroyOnLoad切换场景生成多个重复GameObject问题

问题原因

你当前的单例实现没有做实例存在性校验:每次切换场景后,如果新场景中挂载了相同GameManager/Player脚本的对象被加载,Awake方法都会直接覆盖静态instance变量并执行DontDestroyOnLoad,导致旧的实例没被销毁、新的实例又被保留,最终出现重复对象。

解决方案

修改单例的Awake逻辑,先判断全局实例是否已经存在,如果存在直接销毁当前新生成的对象,仅在实例为空时完成初始化和不销毁标记:

public static GameManager instance;
private void Awake()
{
    // 已有实例时直接销毁当前对象
    if (instance != null)
    {
        Destroy(gameObject);
        return;
    }
    // 无实例时完成初始化
    instance = this;
    DontDestroyOnLoad(gameObject); 
}

其他注意事项

  • 所有需要全局唯一的DontDestroyOnLoad对象(比如Player)都可以套用这套单例逻辑避免重复
  • 如果你不需要在每个场景都放这些全局对象的预制体,可以统一把它们放在初始启动场景中,后续场景不放置对应对象,也能避免重复生成
  • 不要给多个不同的GameObject挂载同一个单例脚本,避免逻辑冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:00:03