在我的应用程序中测试场景时,我确实意识到每次回到主场景(带菜单的场景)时,我都会再次创建一个持久对象。
这个持久对象是我用来附加游戏管理器脚本的对象,因此任何时候都应该只有一个。问题是,如果我回到主菜单;加载一个场景后,它会再次被创建,所以我最终得到了两个相同的游戏对象。
有没有办法避免这种情况;告诉Unity如果游戏对象已经存在,不要再创建它吗?
我可以解决这个问题,创建一个“启动”场景,启动一次,永远不会再次加载(所以启动场景调用主菜单);但它感觉很奇怪,所以我想知道是否有更好的方法。
答案 0 :(得分:3)
private static ClassType instance = null;
void Awake(){
if(instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
return;
}
Destroy(this.gameObject);
}
唤醒在对象的生命周期中只被调用一次。所以第一个创建的将被唤醒,它将自己注册为实例。静态仍然在场景加载,因此它被标记为DontDestroyOnLoad。
当您回到创建该对象的场景时,Unity将在现有对象的基础上添加新实例。将运行该对象的唤醒,并且由于实例变量不为null,它将跳转并销毁此新实例。旧的不再叫Awake,所以它不会受到影响。
答案 1 :(得分:0)
您可以使用DontDestroyOnLoad。所以你可以简单地拖放你的游戏对象,它不会破坏它的第一个场景。所以不需要在每个场景中添加相同的游戏对象。
此外,如果您想使用Singleton模式,可以使用this。