最近在做一个小项目的时候,出现了如下的问题:当进行场景转换的时候,我在转换后的场景中调用了上一个场景的游戏物体是否显示的函数方法,结果出现了如下错误:
ullReferenceException: Object reference not set to an instance of an object,然后下面还有一大堆解释,双击定位之后,发现错误发生在上一个场景中,将游戏物体显示出来的地方,但是那个地方地物体早就挂载好了,由于本人基础比较差,当时怎么也想不明白后来在网上找到了真正的原因:
问题原因:当unity在发生场景转换的时候,原场景会被unity自动销毁,也就是说,在原场景中的所有子物体,都会被一一销毁,并不会保存,这样做的好处是,可以增加unity的运行效率,这也就是为什么我在转换场景会后调用后上一个场景的物体会提示我说没有实例化的对象,被调场景都已经被销毁了哪里还有对应的物体。
解决方法:一:个人比较认可也是最简单的解决方式,将两个场景合二为一,这样不发生场景转换的话,对应的游戏物体也就不会被销毁,当然也就不会发生上面的错误
二:使用DontDestory这个函数方法,在被调场景的脚本中将不想要销毁的游戏物体传在到这个函数参数内,那么当场景转换之后,对应的游戏物体的所有参数都不会被删除,开发者也可以对其进行一系列操作,使用场景可以使过关的游戏角色,场景转换,但是游戏人物不能变化,参数也是一样保存。