DontDestroyOnLoad的使用

作者: 霸俊流年 | 来源:发表于2015-12-17 09:53 被阅读1392次

    参考自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");
    }
    }
    

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

    相关文章

      网友评论

        本文标题:DontDestroyOnLoad的使用

        本文链接:https://www.haomeiwen.com/subject/nnauhttx.html