Unity 中 DontDestroyOnLoad() 方法

往往不怎么清楚unity 这个方法的具体含义的时候,很容易犯一些令人苦笑不得的错误。比如,有一个物体挂载着一个脚本,里面执行了一句 DontDestroyOnLoad(this)。乍看之下没任何问题。但是如果考虑下如下的情形,你是不是也曾经头疼过?比如:有多个场景之间来回切换,你会发现,你的这个挂载的脚本的物体越来越多。

    其实,unity的官方API里说的很明确,加载下一个场景的时候,其他的资源都会被清掉,但挂载了这个脚本的物体会留在下一个场景中。这样造成的问题是,场景里有多个该脚本的实例,导致 bug 出现。

                       Unity 中 DontDestroyOnLoad() 方法

解决方法:

1> 从文档里看,既然在切换场景的时候才会触发这个逻辑,那么一种解决方案就是,将这个带有 DontDestroyOnLoad(this)的这个物体放在游戏中有且只有一次加载机会的场景里,比如进入游戏的 Loading 场景,这样,不管以后场景怎么切换,都不会涉及到这句代码的重复执行。

2>既然是重复,那么可以在代码里确保该实例的唯一性,单例就是这样实现的。这样一来,你可以将这个脚本放在你的游戏的任何一个场景里,任它们怎么切换,每当重新生成了一个新的该脚本的实例的时候,都会判断 Instance是否为空,只有第一次才是空,才执行一次 DontDestroyOnLoad(this),以后的每次调用,都会将该实例 Desttroy 掉。

                                 Unity 中 DontDestroyOnLoad() 方法

    所以,你现在明白了这个方法的真是含义,并怎样灵活的使用它了吗?