您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity入门 >
    DontDestroyOnLoad重复实例化
    时间:2015-01-24 09:59 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印

     Unity3D提供了一个不删除前一个场景中的某一个对象或者脚本的API——DontDestoryOnLoad(对象或者某个脚本)。

    它是为了在游戏开发中可以创建多个场景,但又不会因为场景过度而删除对象。

        但是我们在用这个API的时候我们会发现一个很奇怪的问题就是:如果A里面放了个东西o,当到场景B的时候,o 也会出现在B场景中,

    这里一看,感觉还是对的,然后你再返回到场景A, 你就会惊讶的发现,A里面出现了两个o,然后你到B,

    看到B里面也出现了两个o, 再回到A, A里面出现了3个o, 一直递增上去。Unity3D教程手册

        那我们有什么好的解决办法呢?我的办法就是把要DontDestroyOnLoad的对象做成一个预制体,

    然后专门用一个static bool变量来记录这个对象是否被克隆,当第一次被克隆的时候我们就把这个布尔变量变成真,

    只有在这个布尔变量是假的情况下才克隆这个预制体。那么这个问题就解决了。

        下面的代码是引用的是上述相同的办法。把背景音乐做成了一个预制体,上面绑定了播放音乐的代码:


    using UnityEngine;
    using System.Collections;
    public class DontDesMusic : MonoBehaviour 
    {
       public GameObject MusicBk; 
       public static bool IsHaveMusicBk = false;
       private GameObject clone;
    
       void Start () 
        {
           if(!IsHaveMusicBk)
            {
               clone = Instantiate(MusicBk,transform.position,transform.rotation) as GameObject;              IsHaveMusicBk = true;
            }
    
           DontDestroyOnLoad(clone);
        }
    }


    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
    标签:Unity之家