无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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ó)家法律
忻城县| 澄江县| 邓州市| 南澳县| 藁城市| 石泉县| 镇赉县| 汶上县| 准格尔旗| 安达市| 无为县| 罗山县| 济宁市| SHOW| 阜南县| 庆阳市| 浦江县| 稷山县| 呼玛县| 洱源县| 阜新市| 宁乡县| 潮安县| 恭城| 襄樊市| 久治县| 蛟河市| 寿光市| 铜鼓县| 嫩江县| 庆安县| 哈尔滨市| 仁怀市| 洛南县| 涞源县| 漳浦县| 营口市| 东辽县| 阜平县| 青铜峡市| 昭苏县|