在unity3d中播放不同场景的背景音频的问题

时间:2017-02-25 18:10:16

标签: unity3d unity5

在我的游戏中,我有两个场景。 我想要实现的是,如果用户从一个场景导航到另一个场景,应该从开始播放特定于每个场景的背景音频(音频长度= 0)

但我所有的努力都是徒劳的。

我尝试使用audioSound的'Pause'方法 我试过了     创建一个新的游戏对象并将此场景背景分数分配给它并进行播放     如果有任何

,则销毁为另一个场景创建的gameObject

但它没有给出我想要的结果。

我搜索了如何从开始播放audioClip并停止其他audioClip播放,但没有找到任何。

我知道我不应该要求堆栈溢出代码,但是如果有人已经实现了这个或者有一些伪代码请求你提供它

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,因为它似乎是最简单的背景音乐场景。

如果你真的想要在每个场景中更改音频片段,让我们说场景A必须播放片段A,场景B必须播放片段B,并且一旦场景加载就应该播放两个片段,你只需要创建具有音频源组件的两个场景中的游戏对象,其中Play On Awake标志处于活动状态,然后仅为场景分配适当的剪辑(即:在场景A游戏的音频源组件的音频剪辑字段中指定剪辑A)对象,并对场景B的剪辑B执行相同操作。)

这就是它。

答案 1 :(得分:0)

如果您查看详细代码,则可以尝试此代码。

首先:创建一个脚本“SoundFxScript.cs” //您可以根据需要进行修改

插入此代码:

public class SoundFxScript : MonoBehaviour {
    //Background Music

    public AudioSource Scene1_Sound;
    public AudioSource Scene2_Sound;

    // Use this for initialization
    void Start () {
        PlayBackgroundMusic ();
    }

    // Update is called once per frame
    void Update () {

    }

    public void PlayBackgroundMusic() {
        if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene1") {
            Scene1_SoundPlay();
        } else if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene2") {
            Scene2_SoundPlay();
        } 
    }

    public void Scene1_SoundPlay() {
        Scene1_Sound.Play ();
        Scene2_Sound.Stop ();
    }

    public void Scene2_SoundPlay() {
        Scene1_Sound.Stop ();
        Scene2_Sound.Play ();
    }


// Step Fifth
public void LoadTheScene (string Scenename) {
            UnityEngine.SceneManagement.SceneManager.LoadScene (Scenename);
            sf.PlayBackgroundMusic ();

        }
}

第二:在第一个场景制作Gameobject name = “SoundMusic”,并添加组件脚本 SoundFxScript.cs 。在gameobject “SoundMusic”中,您可以为scene1和scene2添加背景音乐。

第三:制作单件文件 Singleton.cs

插入此代码:

public class Singleton : MonoBehaviour {
    static Singleton instance = null;

    void Start ()
    {
        if (instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);
        instance = this;
    }

}

第四:在gameobject “SoundMusic”添加组件脚本“Singleton.cs”

第五:如何在另一个场景中调用(加载场景)。此方法位于 SoundFxScript.cs

示例您有一个方法来调用加载场景。试试这个方法:

用以下方法调用: LoadTheScene(“Scene2”) //调用scene2

在这里,您可以从任何脚本中调用 SoundFxscript.cs 组件。

示例:

SoundFxScript sf;
sf = GameObject.Find ("SoundMusic").GetComponent<SoundFxScript> ();

您可以使用 LoadTheScene 方法加载新场景,背景音乐将根据场景再次重新播放。

这就是全部。