最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)論 (共 條)

使用qq登录你需要登录后才可以评论。
弥渡县| 响水县| 河南省| 延安市| 肃南| 北川| 富民县| 望谟县| 万州区| 龙山县| 新干县| 修文县| 江门市| 荣成市| 二连浩特市| 昭苏县| 筠连县| 垦利县| 扎兰屯市| 精河县| 祁阳县| 密云县| 拜泉县| 手机| 广南县| 贺兰县| 新绛县| 开化县| 扎赉特旗| 岢岚县| 江川县| 大港区| 南康市| 武功县| 黄山市| 通化市| 松原市| 肥城市| 丹江口市| 崇州市| 分宜县|