首先新增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。
希望有幫助到您