更改场景时的Unity,音量滑块问题

时间:2020-01-16 08:29:55

标签: unity3d

我正在制作一个游戏,其中有一个用于音频源(音乐)的空游戏对象和该音乐的脚本,我在不同的对象中也具有音量滑块。 脚本:

float musicVolume = 1f;

private void Update()
{
    mainMusic.volume = musicVolume; 
}

// Slider will Trigger This 
public void SetVolume(float volume)
{
      musicVolume = volume;
}

我之所以使用这种方式,是因为它很简单,因为我只会使用一种音乐。 这样我就可以正确控制我的音乐音量,但是问题是当我转到另一个场景然后返回时,滑块似乎没有任何作用,因此我的音乐音量不会改变。 那么我该如何解决呢? 对不起,我的英语不好。谢谢...

3 个答案:

答案 0 :(得分:0)

首先,您可以从更新方法中删除卷初始化

您的问题

从滑块设置音量时,可以将成功设置为0.5f 但是在调用Update Methos之后,所以您的音量会从musicVolume变量中设置为1f

解决方案

从更新方法中删除卷初始化

答案 1 :(得分:0)

我的猜测是,具有音频源的对象会在加载新场景后立即销毁。

在脚本中使用它以避免在更改场景时将其释放:

void Awake () {
    DontDestroyOnLoad(this);
}

请注意,由于在每一帧设置音量都不是最佳选择,因此可以避免更新。

答案 2 :(得分:0)

为什么不简单

public void SetVolume(float volume)
{ 
    mainMusic.volume = volume; 
} 

之间没有Update?仅在需要时才做!


对于您的问题:听起来好像您在DontDestroyOnLoad上使用mainMusic,并且由于加载场景后破坏了重复项而丢失了引用。您应该对此感到例外!

但是,只需在脚本中搜索AudioSource,例如

private void Start()
{
    mainMusic = FindObjectOfType<AudioSource>();
}  

public void SetVolume(...){ ... }

或者如果您的场景中有多个AudioSource,请给主要来源一个明确的类型,例如

public MainAudioSource : AudioSource
{
   // Does nothing but now you can explicitely search for it
}    

,然后在另一个脚本中执行

private void Start()
{
    mainMusic = FindObjectOfType<MainAudioSource>();
}