首页 文章

在Unity3d中的多个场景之间交换时播放连续音乐

提问于
浏览
2

我有以下场景

  • 包含带有音频源组件的游戏对象的主菜单场景

  • 一个关于我们的场景

gameObject脚本:

using UnityEngine;
using System.Collections;

public class ManageMusic : MonoBehaviour
{
    private static ManageMusic _instance;

    public static ManageMusic instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = GameObject.FindObjectOfType<ManageMusic>();

                //Tell unity not to destroy this object when loading a new cene!
                DontDestroyOnLoad(_instance.gameObject);
            }

            return _instance;
        }
    }

    private void Awake()
    {
        if (_instance == null)
        {
            Debug.Log("Null");
            //If I am the first instance, make me the Singleton
            _instance = this;
            DontDestroyOnLoad(this);
        }
        else
        {

            //If a Singleton already exists and you find
            //another reference in scene, destroy it!
            if (this != _instance)
            {
                Play();
                Debug.Log("IsnotNull");
                Destroy(this.gameObject);
            }
        }

    }
    public void Update()
    {
        if (this != _instance)
        {
            _instance = null;
        }
    }
    public void Play()
    {
        this.gameObject.audio.Play();
    }
}

关于我们返回按钮脚本:

using UnityEngine;
using System.Collections;

public class Back_btn : MonoBehaviour 
{
     void OnMouseDown() 
     {
        Application.LoadLevel("MainMenu");

     }
 }

enter image description here

enter image description here

当我点击aboutUs按钮时, Game Music object 继续播放,我可以听到音乐,但是当我返回主菜单时,仍然没有播放音乐 . 当我回到主菜单并且音频监听器将音量值设置为 1 时,我可以看到游戏对象没有被破坏,但我无法弄清楚问题是否有人可以帮助我

1 回答

  • 1

    你需要一个单身人士 . Unity Patternsa great post about singleton usage in Unity3D environment . 尝试实现网站中指定的 Persistent Singleton 模式 .

    持久单身人士

    有时您需要单身人士在场景之间持续(例如,在这种情况下,您可能希望在场景转换期间播放音乐) . 一种方法是在你的单身人士上调用DontDestroyOnLoad() .

    public class MusicManager : MonoBehaviour 
    {
        private static MusicManager _instance;
    
        public static MusicManager instance
        {
            get
            {
                if(_instance == null)
                {
                    _instance = GameObject.FindObjectOfType<MusicManager>();
    
                    //Tell unity not to destroy this object when loading a new scene!
                    DontDestroyOnLoad(_instance.gameObject);
                }
    
                return _instance;
            }
        }
    
        void Awake() 
        {
            if(_instance == null)
            {
                //If I am the first instance, make me the Singleton
                _instance = this;
                DontDestroyOnLoad(this);
            }
            else
            {
                //If a Singleton already exists and you find
                //another reference in scene, destroy it!
                if(this != _instance)
                    Destroy(this.gameObject);
            }
        }
    
        public void Play()
        {
            //Play some audio!
        }
    }
    

相关问题