我有一个带有“LevelManager”单例实例的“SingletonManager”类(及其接口)。'LevelManager' GameObject 不应该在整个应用程序生命周期中保持不变,并且应该在每次加载新关卡时替换为新实例。
在运行我当前的代码时,当第二次加载场景时,“LevelManager”似乎丢失了,尽管游戏对象(附有脚本)在场景中。我意识到这可能是因为我仍在尝试访问旧参考。
每次加载新关卡时,确保我的“SingletonManager”拥有“LevelManager”的新实例的最佳方法是什么?
我的代码(删除了无关紧要的):
单例管理器:
public class SingletonManager
{
private static LevelManager instance;
public static ILevelManager Instance
{
get
{
if (this.levelManager == null)
{
this.levelManager = GameObject.FindObjectOfType(typeof(LevelManager)) as LevelManager;
}
return this.levelManager;
}
}
}
单例,不是持久的:
public class Singleton<Instance> : MonoBehaviour where Instance : Singleton<Instance> {
public static Instance instance;
public bool isPersistant;
public virtual void Awake() {
if(isPersistant) {
if(!instance) {
instance = this as Instance;
}
else {
DestroyObject(gameObject);
}
DontDestroyOnLoad(gameObject);
}
else {
instance = this as Instance;
}
}
}