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