我正尝试通过以下方式从连接到主摄像头的脚本重新启动当前级别:
Application.LoadLevel (Application.loadedLevel);
一旦我完成它,一个脚本的多个实例正在运行(可能还有很多我尚未检查过)。例如,我使用一个脚本订阅来自多个脚本的事件,以减少剩下的"子弹"和"得分"。
当我注意到它们被多个数字减少或增加而不是一次只有一步时,我在拍摄时使用Debug.Log()进行打印。它在第一个Application.loadLevel之后打印两次,然后在第二次重置之后打印三次,依此类推。每次重新启动场景时,脚本都会运行很多次,并且会有很多次减少或增加"分数" /"子弹离开"。
还有一个脚本具有null动画师问题,我认为这也是由于多个实例问题所致。
由于多个实例问题,一切看起来都搞砸了。我在游戏中的任何地方都绝对没有DontDestroyOnLoad。
我使用事件和代表。在我发布事件的地方,当我使用Debug.Log()查看它是否发布了这么多次时,它只按预期打印一次。但是监听这些事件的脚本:
void OnEnable()
{
BulletController.scoreUP += scoreIncrease;
BulletController.bulletCreated += bulletDecrease;
}
void OnDisable()
{
BulletController.scoreUP -= scoreIncrease;
BulletController.bulletCreated -= bulletDecrease;
}
每次重启场景时,都会监听并执行两次或三次左右。
答案 0 :(得分:1)
您的问题与您的OnDisable功能有关。在销毁对象时,OnDisable不会被调用。
您需要一个名为OnDestroy的函数,它以相同的方式取消订阅这些事件(您可能希望保留OnDisable函数,以防有任何对象被禁用)。