unity场景切换问题保留新的删除旧的

我现在有A场景和B场景,现在A场景的物体A1,DontDestroyOnLoad后切换到b场景在b场景中DestroyA1。
然后B场景切换回A场景 现在A场景有时会有两个A1物体

img


A1代码

public class KeepPlayers : MonoBehaviour
{
    public static KeepPlayers instance;
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(this);
        }
        else
        {
            Destroy(this);
        }
        Debug.Log(instance == null);
    }
}

问题原因:应该是生成A1的代码有问题,应该在动态生成时处理,而不是生成之后再A1里面处理。因为当你生成两个A1时,这个两个A1分别有自己的单例,也就互不干扰,所以上面的代码应该执行不到else的条件里面。

解决方法:在生成A1代码处添加校验A1是否存在,这样就不会同时存在两个A1了。

if(KeepPlayers.instance == null)
{
    // 生成A1
}

这个简单,用代码生成A1,切换时检查A1是否存在就行了,存在就不再生成
一个简单的单例,不理解可以去搜一下"单例模式"