Unity-使用UI滑块通过场景播放背景音乐

时间:2018-06-27 10:55:06

标签: c# unity3d audio uislider mixer

我在Unity中创建了一个具有4个不同场景的游戏(开始,登录,选项,游戏本身)。

有了一个空的游戏对象(在起始场景中)和DontDestroyOnLoad函数,我设法在所有场景中播放音乐,而又不停止或在每个场景中加载新的音乐。

在选项场景中,有一个滑块钩接到了主音频混音器上,到目前为止,它仍然有效。

对我来说,唯一的问题是滑块可以在开始场景中“干扰” gameobject(背景音乐,应通过滑块触发)。
如果有人可以帮助我,那将太好了! :)

这里有一些摘录:

ChangeVolume类:

public AudioMixer audioMixer;

public void setVolume(float volume){
    audioMixer.SetFloat ("volume", volume);
}

MusicBehaviour类:

//Play global
private static MusicBehaviour instance = null;
    public static MusicBehaviour Instance {
        get {
              return instance;
        }
    }

void Awake()
{
    if (instance != null && instance != this) {
        Destroy (this.gameObject);
        return;
    } else {
        instance = this;
    }
    DontDestroyOnLoad (this.gameObject);
}

//Play Global End

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

我很高兴您的帮助/解决方案,也许有一个更简单的解决方案! :-)

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用PlayerPrefs并将声音值保存在那里。每次在Awake()中启动游戏时,您都会设置该值,并在触发滑块时更改PlayerPrefs中的值并将其设置为MusicBehaviour实例。

答案 1 :(得分:0)

我通过以下方式编辑脚本来解决问题:

Music Behaviour类:

 void Update () {
         float vol = ChangeVolume.vol;
         this.gameObject.GetComponent<AudioSource> ().volume = vol;
     }

Change Volume类:

public void setVolume(float volume){
    vol = volume;
}

public static float vol = 1.0f;

由于不再需要我的混音器,我也删除了它。而且效果很好! :-)