五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

音量控制條隨場(chǎng)景切換不消失且隨著場(chǎng)景切換不會(huì)創(chuàng)建新的音樂播放

2023-06-21 17:49 作者:Q正面男孩Q  | 我要投稿

? ? ? ?在最近的制作游戲練習(xí)中本人想要實(shí)現(xiàn)背景音樂的播放且隨著場(chǎng)景的切換音樂依舊存在且會(huì)保持原來的播放狀態(tài)繼續(xù)播放。簡(jiǎn)單來說就是隨著場(chǎng)景的切換不會(huì)重新播放音樂而是繼續(xù)播放。(寫這個(gè)稿件是因?yàn)榻?jīng)本人網(wǎng)絡(luò)查詢當(dāng)時(shí)并未找到解決方法,這個(gè)是自己想出來的,本人菜雞一枚,發(fā)出來只是想幫一下其他需要解決此問題的同學(xué),如有大佬可以分享一下簡(jiǎn)單的實(shí)現(xiàn))

? ? ? ?下面是本人創(chuàng)作過程及每個(gè)過程解決的方法:

? ? ? ?1.創(chuàng)建一個(gè)slider滑條,創(chuàng)建MusicController腳本,用來獲取audiosorce組件,從而實(shí)現(xiàn)音量大小伴隨著滑條的移動(dòng)而增減。核心代碼(最后會(huì)分享實(shí)現(xiàn)該過程全部代碼):

? ? ? ? GlobalControl.Instance.musicVolume = volumeSlider.value;

? ? ? ? musicSource.volume = GlobalControl.Instance.musicVolume;

? ? ? ? 此代碼是最終實(shí)現(xiàn)效果的代碼,并非第一次寫的代碼。這段代碼主要幫助同學(xué)們知道如何實(shí)現(xiàn)音量大小伴隨著滑條的移動(dòng)而增減,上述代碼有一個(gè)全局變量Instance,可以忽略了解即可,最后會(huì)寫到。

? ? ? ? ?2.上述步驟1是我第一次實(shí)現(xiàn)的效果,發(fā)現(xiàn)音量控制條會(huì)隨著場(chǎng)景的切換而消失掉,然后我敲寫了這一段代碼:

? ? ? ? ?DontDestroyOnLoad(gameObject);

? ? ? ? ?讓音量控制條不會(huì)消失。但是,經(jīng)測(cè)試發(fā)現(xiàn)了一個(gè)bug:發(fā)現(xiàn)第一場(chǎng)景切換第二場(chǎng)景slider和audiosorce雖然依舊存在,但發(fā)現(xiàn)第二場(chǎng)景切換到第一場(chǎng)景會(huì)再次創(chuàng)建一個(gè)重新播放的音樂,這就造成了兩段相同的音樂同時(shí)播放,從而音樂播放混亂。但最糟糕的是,如果在兩個(gè)場(chǎng)景切換多次,就會(huì)創(chuàng)建多個(gè)相同的音樂。

? ? ? ? ?3.最終我采用了一個(gè)單例模式

? ? ? ? ? 首先,創(chuàng)建一個(gè)slider和添加audiosorce組件,這個(gè)ui物體上掛載MusicController腳本實(shí)現(xiàn)音量大小伴隨著滑條的移動(dòng)而增減。

?MusicController腳本:

? ? ? ? ?public Slider volumeSlider;

? ? ? ? ?private AudioSource musicSource;

? ? ? ? void Start() {

? ? ? ? musicSource = GetComponent<AudioSource>();? // 獲取AudioSource組件引用

? ? ? ? ?}

? ? ? ? public void SetVolume() {

? ? ? ? GlobalControl.Instance.musicVolume = volumeSlider.value;

? ? ? ? musicSource.volume = GlobalControl.Instance.musicVolume;

? ? }

? ? ? ? ?之后創(chuàng)建一個(gè)空物體將上述創(chuàng)建的ui拖進(jìn)去,將GlobalControl腳本掛在空物體上。GlobalControl腳本:

? ? ? ? ?public static GlobalControl Instance;

? ? ? ?? public float musicVolume;

? ? ? ? ?void Awake(){

? ? ? ? if (Instance == null){

? ? ? ? ? ? DontDestroyOnLoad(gameObject);

? ? ? ? ? ? Instance = this;

? ? ? ? }

? ? ? ? else if (Instance != this)

? ? ? ? {

? ? ? ? ? ? Destroy(gameObject);

? ? ? ? }

? ? }

在GlobalControl腳本申請(qǐng)的全局變量同時(shí)也在MusicController腳本中使用。GlobalControl腳本中的:

???if (Instance == null){

? ? ? ? ? ? DontDestroyOnLoad(gameObject);

? ? ? ? ? ? Instance = this;

? ? ? ? }

這段代碼主要是判斷除了第一場(chǎng)景外的場(chǎng)景是否存在音樂控制條,如果不存在那么將保留第一場(chǎng)景的音樂控制條。

else if (Instance != this)

? ? ? ? {

? ? ? ? ? ? Destroy(gameObject);

? ? ? ? }

這段代碼的意思是,如果已經(jīng)存在了音樂控制條,那么則將多余的給刪除掉。也就解決了來回切換場(chǎng)景且會(huì)產(chǎn)生多個(gè)音樂的問題。

? ? ? ? 希望我的投稿對(duì)有該問題的同學(xué)有幫助!



? ? ? ? ?






音量控制條隨場(chǎng)景切換不消失且隨著場(chǎng)景切換不會(huì)創(chuàng)建新的音樂播放的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
天峨县| 洪泽县| 德江县| 泽州县| 平南县| 揭阳市| 四会市| 荆州市| 柘城县| 建始县| 石狮市| 安仁县| 青岛市| 黄梅县| 九江县| 常德市| 云和县| 唐河县| 凌海市| 渭南市| 宣恩县| 治多县| 河源市| 黄山市| 上蔡县| 辛集市| 平远县| 华阴市| 旌德县| 万宁市| 呼玛县| 铜陵市| 扶余县| 尖扎县| 宁德市| 鹤岗市| 页游| 莱西市| 洪泽县| 饶河县| 两当县|