我现在有A场景和B场景,现在A场景的物体A1,DontDestroyOnLoad后切换到b场景在b场景中DestroyA1。
然后B场景切换回A场景 现在A场景有时会有两个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是否存在就行了,存在就不再生成
一个简单的单例,不理解可以去搜一下"单例模式"