首先新增GameObject->UI->Scrollbar以及Button,分別做音量控制條和是否靜音按鈕。
新增音樂播放器,使用空的GameObject即可,音樂播放器上掛載Audio Source,在AudioClip上加入音樂,到這步可以執行看看音樂是否會播放。
必要的物件都準備好後,在音樂播放器下新增控制腳本。
這個腳本下需要做兩件事:
1.移動音量控制條位置時,要依位置改變音量。
2.按下靜音紐時,音量歸0,再按一次恢復音量。
以下是腳本內容:
using UnityEngine;
public class MusicControl : MonoBehaviour {
private AudioSource audioSource;
private bool muteState;
private float preVolume;
void Start () {
audioSource = GetComponent<AudioSource>();
audioSource.volume = 0;
muteState = false;
preVolume = audioSource.volume;
}
.
.
.
}
首先我們需要幾個變數:audioSource抓volume(音量)的數值,muteState判斷目前靜音的狀態,以及preVolume紀錄靜音前的音量,在Start執行時,做這些變數的初始化。using UnityEngine;
public class MusicControl : MonoBehaviour {
private AudioSource audioSource;
private bool muteState;
private float preVolume;
void Start () {
audioSource = GetComponent<AudioSource>();
audioSource.volume = 0;
muteState = false;
preVolume = audioSource.volume;
}
public void VolumeChanged(float newVolume) {
audioSource.volume = newVolume;
muteState = false;
}
.
.
.
}
接著是音量控制的函式,這裡的VolumeChanged做兩件事,當被呼叫時把newVolume帶入audioSource.volume改變音量,以及將靜音狀態設為false。using UnityEngine;
public class MusicControl : MonoBehaviour {
private AudioSource audioSource;
private bool muteState;
private float preVolume;
void Start () {
audioSource = GetComponent<AudioSource>();
audioSource.volume = 0;
muteState = false;
preVolume = audioSource.volume;
}
public void VolumeChanged(float newVolume) {
audioSource.volume = newVolume;
muteState = false;
}
public void MuteClick() {
muteState = !muteState;
if (muteState)
{
preVolume = audioSource.volume;
audioSource.volume = 0;
}
else
audioSource.volume = preVolume;
}
}
最後做靜音的控制,在MuteClick執行時做是否靜音的判斷,當按鈕按下時,一定是靜音的是或否,所以先做muteState != muteState 的true false的切換。當muteState為true,也就是靜音時,將目前的音量存在preVolume變數中,再將音量audioSource.volume設為0。
而muteState為false時,再將preVolume數值帶回audioSource.volume。
接著回到場景中,做音量控制條和靜音按鈕的設定:
靜音按鈕在On Click項目上做同樣的步驟,找到MuteClick函式按下就完成了。
以上就是音量的控制,其實還有靜音按鈕圖切換,及靜音切換時音量條的位置等小細節,不過就先跳過,這次就到這裡。





我做兩個Panel , 我把上面的程式都放在第二個panel , 然後第二個panel的scarllbar功能是正常的 , 可是我跳回第一個panel時 , 第二個panel的音樂就停止了 , 而且第二個panel的動作都被初始化了 , 請問要如何解決 , 然後如果我要儲存panel的動作(比如說靜音或調大小聲)要如何做?
回覆刪除您好:
刪除這篇文章裡面並沒有提到數值的儲存,所以換場景後是無法維持原來功能的。
您可以可以使用DontDestroyOnLoad作物健保留,或是把數值設為靜態static。
希望有幫助到您