float musicVolume = 1f;
private void Update()
{
mainMusic.volume = musicVolume;
}
// Slider will Trigger This
public void SetVolume(float volume)
{
musicVolume = volume;
}
我之所以使用这种方式,是因为它很简单,因为我只会使用一种音乐。 这样我就可以正确控制我的音乐音量,但是问题是当我转到另一个场景然后返回时,滑块似乎没有任何作用,因此我的音乐音量不会改变。 那么我该如何解决呢? 对不起,我的英语不好。谢谢...
答案 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>();
}