或许有人在使用unity制作多个场景之后,进行场景重载遇到数据不清零的问题,举个粒子:你做了一个游戏,里面有5个游戏场景,一个主页场景,当你从主页中选择了一个游戏场景进入,这时你发现你的游戏场景一切都是正常的,当你从这个游戏场景返回你的主页后,从主页进入第二个场景后,你会发现你场景中的一些异常:你设置的单局游戏时间是10分钟,现在变成了5分30秒,你主角的血量本来是100,现在却变成了30!
那么出现这种问题的原因是什么呢?
场景重载之后,数据未清空!
public static bloodCount=100;//定义主角的血量为100
void Update(){
if(bloodCount==0)
{
//此处是主角在死亡后,你编写的像评分列表或者其他东西
}
}
当你在一个场景中,让主角的血量变为了0,重新进入第二个场景后,你发现主角的血量并不是满血,仍然是0,导致第二个场景刚进去就播放了主角死亡后的评分页面!
无论你使用的是同步加载或者异步加载,你都会遇到这样的问题,出现这个问题的原因是你没有将主角的血量“清零”(当然了,这个地方应该是将主角的血量设置为100)
我最近也遇到了这样的问题,我是这样解决的:
我的代码中使用了很多static变量或者bool,导致我进入其他场景的时候遇到了以上问题,解决的办法很简单,那就是在脚本中写:
public static bloodCount=100;//定义主角的血量为100
// public static float score;分数
void Star()
{
bloodCount=100;
//score =0;如果你定义了分数,需要他重载后从0分开始,这个时候你可以将它设置为0
}
void Update(){
if(bloodCount==0)
{
//此处是主角在死亡后,你编写的像评分列表或者其他东西
}
}
在你的脚本中的star生命周期将他重新赋值,就可以了,因为你在进入一个新的场景后,他会率先执行star,将你的血量重新定义为100!
经验:
或许你看过很多教程,里面都会告诉你命名规范,比如你命名一个年龄,尽量不要使用public int a;这种形式,会让别人看不懂,使用public int age=10;直接让人看懂,一个人的年龄为10岁,但是当你使用静态的时候,最好将age=10;写在star里面!
这是我的首秀,不是很高深,如果它真的帮助到了你,点个赞再走哦~