• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

DontDestroyOnLoad的使用

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1102/155.html

DontDestroyOnLoad的使用

我们常州手机App游戏开发培训工作室幻天网络这篇文章参考自Unity3D研究院之DontDestroyOnLoad的坑
1.DontDestroyOnLoad可以保证Gameobject以及上面绑定的组件不会销毁,在处理全局控制的时候有用。
public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
DontDestroyOnLoad(transform.gameObject);
}}
2.使用DontDestroyOnLoad的时候需要注意的坑:

由于使用DontDestroyOnLoad的物体不会被释放掉,假设我们写了上面的代码,而物体所在的游戏场景又可以重复进入的时候,游戏物体就会在每次进入场景的时候创建一次,甚至可以无限创建下去,这样的处理明显不妥。

3.针对性的解决方案:
方案1:在每次调用DontDestroyOnLoad的时候,都去判断场景中是否有对应的物体,如果没有再去创建
public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
If(Gameobject.Find("GlobalController"))
 DontDestroyOnLoad(transform.gameObject);
}}
方案2:把DontDestroyOnLoad的调用写到最初始的场景,并且保证相应的场景中不存在再次进入的可能性
方案3:把使用DontDestroyOnLoad的脚本进行静态初始化,在静态初始化的时候进行DontDestroyOnLoad操作
public class Global:MonoBehaviour
{
public static Globalinstance;
static Global()
{
GameObjectgo=newGameObject("Globa");
DontDestroyOnLoad(go);
instance=go.AddComponent();
}

public voidDoSomeThings()
{
Debug.Log("DoSomeThings");
}

voidStart()
{
Debug.Log("Start");
}
}

调用方便,也封装方便,同样的方法可以使用在单例等的构建上。



上篇:上一篇:使用HoloToolKit实现导航手势旋转3D模型
下篇:下一篇:Unity3d游戏开发设计模式之子类沙盒模式