Application.LoadLevel-留下多个脚本/对象实例

本文关键字:脚本 对象 实例 LoadLevel- Application | 更新日期: 2023-09-27 18:19:29

我正试图通过从附加到主摄像头的脚本重新启动我的当前级别

Application.LoadLevel (Application.loadedLevel);

一旦我完成它,一个脚本的多个实例就会运行(可能还有很多我还没有检查)。例如,我使用一个订阅多个脚本中的事件的脚本来减少"剩余项目符号"answers"分数"。

当我注意到它们减少或增加了多个数字,而不是一次一步时,我在拍摄时使用Debug.Log()打印。它在第一次Application.loadLevel后打印两次,然后在第二次重置后打印三次,依此类推。每次我重新启动场景时,脚本都会运行那么多次,"分数"/"剩余项目符号"会减少或增加那么多次。

还有一个脚本有一个空的动画师问题,我认为这也是由于多个实例的问题。

由于多个实例的问题,一切看起来都一团糟。此外,我在游戏中的任何地方都绝对没有DontDestroyOnLoad。

我使用事件和代理。在我发布事件的地方,当我使用Debug.Log()查看它是否发布了这么多次时,它只按预期打印一次。但是监听这些事件的脚本:

void OnEnable()
{
    BulletController.scoreUP += scoreIncrease;
    BulletController.bulletCreated += bulletDecrease;
}
void OnDisable()
{
    BulletController.scoreUP -= scoreIncrease;
    BulletController.bulletCreated -= bulletDecrease;
}

对于场景的每次重新启动,侦听并执行两次或三次等等。

Application.LoadLevel-留下多个脚本/对象实例

问题在于使用OnDisable函数。销毁对象时,不会调用OnDisable。

你需要一个名为OnDestroy的函数,它可以以同样的方式取消订阅这些事件(你可能想保留你的OnDisable函数,以防有任何对象被你禁用)。