国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

這篇具有很好參考價(jià)值的文章主要介紹了unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?前言

本文將會(huì)介紹如何使用audiomixer實(shí)現(xiàn)全局音量控制,并且會(huì)介紹如何實(shí)現(xiàn)游戲內(nèi)的含靜音功能的音量設(shè)置界面。

本人也是個(gè)初學(xué)者,在看過一些關(guān)于音量管理的教程后,發(fā)現(xiàn)使用audiomixer實(shí)現(xiàn)全局音量控制可能是最方便、功能最完備、強(qiáng)大的,因此在這里分享一下自己的實(shí)現(xiàn)方法。如果有錯(cuò)誤,還請(qǐng)指出捏

基礎(chǔ)

音效成功播放需要兩個(gè)先決條件:音頻源 (Audio Source) 音頻監(jiān)聽器 (Audio Listener)。

音頻源 (Audio Source)?在場(chǎng)景中播放音頻,而音頻監(jiān)聽器 (Audio Listener)?充當(dāng)類似于麥克風(fēng)的設(shè)備。它接收來自場(chǎng)景中任何給定音頻源的輸入,并通過計(jì)算機(jī)揚(yáng)聲器播放聲音。

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

AudioListener和AudioSource

?其中,Audio Listener 會(huì)在相機(jī)創(chuàng)建時(shí)自動(dòng)創(chuàng)建,當(dāng)同一場(chǎng)景中的Audio Listener數(shù)量大于1時(shí),unity編輯器會(huì)報(bào)錯(cuò)unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)?

混音器 (Audio Mixer) 允許混合各種音頻源,對(duì)音頻源應(yīng)用效果。在音頻源腳本(Audio Source)的Output掛載AudioMixer的Group Controller文件后,這個(gè)音頻源就會(huì)放出應(yīng)用了AudioMixer效果的音頻?;诖?,通過使用代碼對(duì)AudioMixer的音量進(jìn)行動(dòng)態(tài)調(diào)整,我們就可以實(shí)現(xiàn)游戲內(nèi)動(dòng)態(tài)調(diào)整這一個(gè)音頻源的音量,進(jìn)而調(diào)整全局音量了。

邏輯:

游戲中的音頻大致可分為 音效(Sound) 和音樂(Music)兩種,因此我們這里就只實(shí)現(xiàn)對(duì)音效和音樂的設(shè)置,同時(shí)實(shí)現(xiàn)對(duì)主音量(Master)的設(shè)置

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

邏輯關(guān)系

?文章來源地址http://www.zghlxwxcb.cn/news/detail-479429.html

?AudioMixer制作

1.create->AudioMixerunity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

?2.打開AudioMixer

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

這個(gè)NewAudioMixer就是新建的AudioMixer

?3.點(diǎn)擊Group的加號(hào)創(chuàng)建Music、Sound,并設(shè)置好層級(jí)關(guān)系

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

需要拖動(dòng),將三個(gè)group的層級(jí)關(guān)系設(shè)置為如圖所示

?4.在每個(gè)group的inspector中右鍵Volume,并將volume屬性暴露出去unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

5.如圖所示,重命名暴露出去的volume屬性unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

至此,AudioMixer就基本完成了。將AudioMixer文件夾下的Audio Mixer Group Controller文件拖動(dòng)到AudioSource的Output中,這個(gè)AudioSource放出的音頻就都將會(huì)應(yīng)用對(duì)應(yīng)Group的效果。

下面,我們就可以通過動(dòng)態(tài)設(shè)置剛才暴露出的volume屬性來實(shí)現(xiàn)音量設(shè)置了。開始愉快的寫代碼吧~

?

音量設(shè)置面板實(shí)現(xiàn)

在這里,我簡單地假設(shè)開發(fā)情形如下:有兩個(gè)場(chǎng)景,每個(gè)場(chǎng)景播放不同的背景音樂。那么,就只需要在兩個(gè)場(chǎng)景中創(chuàng)建兩個(gè)搭載了AudioSource,并循環(huán)播放bgm的空物體,即可實(shí)現(xiàn)播放背景音樂的需求

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

如圖所示

?而音效的播放,則是在所有場(chǎng)景中都會(huì)頻繁地使用到,并且播放的音效各不相同,因此需要?jiǎng)?chuàng)建一個(gè)用于播放音效的持續(xù)單例腳本,使其在場(chǎng)景切換時(shí)不被摧毀,并且便于其他腳本調(diào)用播放音效的腳本,滿足整個(gè)游戲的音效播放需求。

至于音量設(shè)置,由常理可知音量是全局均可設(shè)置的,因此也使用持續(xù)單例模式開發(fā),并且用滑動(dòng)條(sliider)來調(diào)節(jié)音量。

同時(shí):我們需要實(shí)現(xiàn)音量設(shè)置面板的如下功能:

1.靜音按鈕

2.取消靜音時(shí)回調(diào)滑動(dòng)條到未靜音時(shí)的值

那么,我們將這一個(gè)功能的實(shí)現(xiàn)分為兩個(gè)部分:持續(xù)單例AudioManager,以及一個(gè)繼承了monobehavior的腳本,用于控制其所處場(chǎng)景的音量ui。

?

AudioManager腳本

(我偷懶,就把播放音效功能和AudioManager腳本寫到一起了,雖然這樣不會(huì)有什么大問題,但二者終究不是同一個(gè)功能,可能會(huì)導(dǎo)致代碼比較混亂)

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Audio;

//使用單例模式開發(fā),繼承單例父類,使其在場(chǎng)景切換時(shí)不銷毀
//同時(shí)包括音量設(shè)置功能和播放音效功能
public class AudioManager : PersistentSingleton<AudioManager>
{
    [SerializeField] AudioMixer audioMixer;
    
    //改變音調(diào)
    const float pitchMin = 0.9f;
    const float pitchMax = 1.1f;
    
    //用于判斷靜音與否
    private bool IsMuteMaster = false;
    private bool IsMuteMusic = false;
    private bool IsMuteSound = false;
    //用于儲(chǔ)存靜音前的音量
    private float LastMaster;
    private float LastMusic;
    private float LastSound;

    //音量設(shè)置
    //Slider on click:調(diào)節(jié)音量,若靜音則取消靜音
    public void MasterSldOnClick(GameObject image, Slider slider)
    {
        audioMixer.SetFloat("vMaster", slider.value);
        if (IsMuteMaster == false) return;
        else
        {
            image.SetActive(false);
            IsMuteMaster = false;
        }
    }
    public void MusicSldOnClick(GameObject image, Slider slider)
    {
        audioMixer.SetFloat("vMusic", slider.value);
        if (IsMuteMusic == false) return;
        else
        {
            image.SetActive(false);
            IsMuteMusic = false;
        }
    }
    public void SoundSldOnClick(GameObject image, Slider slider)
    {
        audioMixer.SetFloat("vSound", slider.value);
        if (IsMuteSound == false) return;
        else
        {
            image.SetActive(false);
            IsMuteSound = false;
        };
    }

    //Button on click:若靜音則取消靜音并回調(diào)音量;若未靜音則靜音并儲(chǔ)存音量
    public void MasterBtnOnClick(GameObject image, Slider Master)
    {
        if (IsMuteMaster)
        {
            image.SetActive(false);
            IsMuteMaster = false;
            Master.value = LastMaster;
        }

        else
        {
            image.SetActive(true);
            LastMaster = Master.value;
            Master.value = Master.minValue;
            IsMuteMaster = true;
        }
    }
    public void SoundBtnOnClick(GameObject image, Slider Sound)
    {
        if (IsMuteSound)
        {
            image.SetActive(false);
            IsMuteSound = false;
            Sound.value = Instance.LastSound;
        }

        else
        {
            image.SetActive(true);
            LastSound = Sound.value;
            Sound.value = Sound.minValue;
            IsMuteSound = true;
        }
    }
    public void MusicBtnOnClick(GameObject image, Slider Music)
    {
        if (IsMuteMusic)
        {
            image.SetActive(false);
            IsMuteMusic = false;
            Music.value = LastMusic;
        }

        else
        {
            image.SetActive(true);
            LastMusic = Music.value;
            Music.value = Music.minValue;
            IsMuteMusic = true;
        }
    }
    

    [SerializeField] AudioSource SoundPlayer;
    //播放音效
    public void PlaySound(AudioClip audioClip)
    {
        SoundPlayer.pitch = 1;
        SoundPlayer.PlayOneShot(audioClip);
    }

    // 改變音調(diào),主要用于重復(fù)播放的音效
    public void PlayRandomSound(AudioClip audioClip)
    {
        SoundPlayer.pitch = Random.Range(pitchMin , pitchMax );
        SoundPlayer.PlayOneShot(audioClip);
    }

    public void PlayRandomSound(AudioClip[] audioClip)
    {
        PlayRandomSound(audioClip[Random.Range(0, audioClip.Length)]);
    }
}

其中 ,PersistentSingleton為持續(xù)泛型單例父類,使腳本掛載的物體不隨場(chǎng)景改變而銷毀,并且使其他腳本更容易調(diào)用本腳本內(nèi)容。代碼見下,詳情可見unity單例,實(shí)現(xiàn)全局保存/跨場(chǎng)景傳輸數(shù)據(jù)

using UnityEngine;

public class PersistentSingleton<T> : MonoBehaviour where T : Component
{
    public static T Instance { get; private set; }

    protected virtual void Awake()
    {
        if (Instance == null)
        {
            Instance = this as T;
        }
        else if (Instance != this)
        {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(gameObject);
    }
}

?寫完AudioManager腳本后,將AudioManager掛載到一個(gè)第一個(gè)場(chǎng)景的空物體上,以便生效(或是掛載到可以調(diào)節(jié)音量的第一個(gè)場(chǎng)景也行)。然后再將剛做好的AudioMixer和用于播放音效的AudioSource拖進(jìn)腳本里面就行了~

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

AudioSource和AudioManager如上圖所示
在這種實(shí)現(xiàn)方式下,需要把AudioSource放在AudioManager下,防止跨場(chǎng)景銷毀。但這是基于只用這一個(gè)音源就可滿足整個(gè)游戲音效需求的大前提下的,可能會(huì)有更好的實(shí)現(xiàn)方法。

?

AudioManager是全局起作用的,只需要在調(diào)節(jié)滑動(dòng)條(slider)時(shí)調(diào)用三個(gè)SldOnClick函數(shù)/點(diǎn)擊按鈕時(shí)調(diào)用三個(gè)BtnOnClick函數(shù),即可以實(shí)現(xiàn)全局調(diào)節(jié)音量的功能。

不過值得注意的是,三個(gè)BtnOnClick函數(shù)中有一條命令:Sound.value = Instance.LastSound。這條命令不會(huì)導(dǎo)致bug,會(huì)正常觸發(fā)SldOnClick,因?yàn)镾ldOnClick的觸發(fā)條件實(shí)際上是On Value Change(所有slider都是),只要值變化就可以觸發(fā),而并非一定要click。

?

各場(chǎng)景音量設(shè)置界面,以及設(shè)置界面腳本

下面,我們需要為每個(gè)場(chǎng)景創(chuàng)建音量設(shè)置界面,這里只創(chuàng)建一個(gè)場(chǎng)景的,因?yàn)槠渌麍?chǎng)景也是一樣的,實(shí)際開發(fā)時(shí)復(fù)制粘貼就行。

1.滑動(dòng)條(slider)

slider組件比較復(fù)雜,雖然不難,但是創(chuàng)建一個(gè)功能完備的slider也不是一兩句就能說完的,這里時(shí)跳過,不懂的小伙伴可以去找些教程,先創(chuàng)建一個(gè)能用的滑動(dòng)條。

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

?

2.音量設(shè)置界面

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

按照上圖思路,繼續(xù)創(chuàng)建音效和音樂的設(shè)置界面。unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

?3.設(shè)置界面腳本

using UnityEngine;
using UnityEngine.UI;

public class TestScene : MonoBehaviour
{
    [Header("-----音量設(shè)置條-----")]
    [SerializeField] Slider Master;
    [SerializeField] Slider Music;
    [SerializeField] Slider Sound;

    //SldOnClick:傳遞參數(shù)以觸發(fā)AudioManager的SldOnClick
    public void MasterSldOnClick(GameObject image)
    {
        AudioManager.Instance.MasterSldOnClick(image, Master);
    }
    public void MusicSldOnClick(GameObject image)
    {
        AudioManager.Instance.MusicSldOnClick(image, Music);
    }
    public void SoundSldOnClick(GameObject image)
    {
        AudioManager.Instance.SoundSldOnClick(image, Sound);
    }

    //BtnOnClick:傳遞參數(shù)以觸發(fā)AudioManager的BtnOnClick
    public void MasterBtnOnClick(GameObject image)
    {
        AudioManager.Instance.MasterBtnOnClick(image, Master);
    }
    public void SoundBtnOnClick(GameObject image)
    {
        AudioManager.Instance.SoundBtnOnClick(image, Sound);
    }
    public void MusicBtnOnClick(GameObject image)
    {
        AudioManager.Instance.MusicBtnOnClick(image, Music);
    }

}

這個(gè)腳本實(shí)際上只是起到了傳遞參數(shù)的作用,這么做一方面時(shí)因?yàn)?,多個(gè)參數(shù)的函數(shù)不能掛載到button、slider等組件上,另一方面是因?yàn)椋?AudioManager是持續(xù)單例,在某些場(chǎng)景中不是初始存在,無法直接掛載到組件上,需要使用代碼動(dòng)態(tài)調(diào)用。

將這個(gè)腳本掛載到場(chǎng)景中(隨便哪都行),并將三個(gè)slider掛載到腳本上即可。unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

?3.配置按鍵與滑動(dòng)條

以Master按鍵和滑動(dòng)條為例:

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

將剛才設(shè)置好的腳本掛到button組件下,并選擇MasterBtnOnClick函數(shù),將按鍵的子物體image掛到這個(gè)函數(shù)下面

unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

Sound、Music同上

同樣的,給Master的slider掛上?MasterSldOnClick函數(shù),同樣的把Master的叉號(hào)掛到函數(shù)下即可。

至此,整個(gè)音量設(shè)置界面就做完了unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)

?

?

?

?

?

到了這里,關(guān)于unity全局音量管理/全局音量設(shè)置與音量設(shè)置界面(含靜音功能)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity光照相關(guān)知識(shí)和實(shí)踐 (烘焙光照,環(huán)境光設(shè)置,全局光照)

    Unity光照相關(guān)知識(shí)和實(shí)踐 (烘焙光照,環(huán)境光設(shè)置,全局光照)

    本文將會(huì)通過一個(gè)簡單的場(chǎng)景搭建,介紹如何使用烘焙光照以及相關(guān)的注意事項(xiàng)。另外還介紹了Unity內(nèi)全局光照(GI)的知識(shí)和GI實(shí)際在游戲內(nèi)的表現(xiàn)效果。 Unity關(guān)于光照相關(guān)的參考文檔地址:https://docs.unity.cn/cn/current/Manual/LightingOverview.html 下面是一些基本的概念 直接光照指的

    2024年02月15日
    瀏覽(37)
  • OBS 基礎(chǔ)之 混音面板 及 實(shí)際靜音后,動(dòng)態(tài)后移控件功能

    目錄 一、混音面板 1、mixerDock 創(chuàng)建 2、scrollArea 3、volumeWidgets 4、添加音量控件

    2024年02月12日
    瀏覽(17)
  • android 12.0音量鍵功能開關(guān)(屏蔽音量加減功能)

    在12.0的系統(tǒng)定制化開發(fā)中,要求屏蔽掉音量+ 音量-的功能,根據(jù)系統(tǒng)屬性來判斷是否響應(yīng)音量加減的功能,在系統(tǒng)上層中是由PhoneWindowManage來管理音量鍵的功能, 所以就要看是PhoneWindowManage.java中怎么處理的音量鍵的功能 首選看的源碼關(guān)于音量鍵的處理 路徑:/frameworks/base/se

    2024年02月06日
    瀏覽(16)
  • Unity中UGUI界面的分辨率適配設(shè)置

    Unity中UGUI界面的分辨率適配設(shè)置

    以下是個(gè)人對(duì)Unity中屏幕適配方案的理解: 一、Scale With Screen Size方案(根據(jù)屏幕大小自動(dòng)縮放) 1、如果選用的是下圖所示的分辨率適配方案,也就是把Canvas和Canvas Scaler這兩個(gè)組件中設(shè)置和下圖一樣的話。 還有就是你所制作的UI界面一定是要掛載在和下圖中一樣設(shè)置的Canvas物

    2024年02月16日
    瀏覽(25)
  • 【Java】學(xué)生成績管理系統(tǒng)(圖形化界面實(shí)現(xiàn)相關(guān)功能)

    【Java】學(xué)生成績管理系統(tǒng)(圖形化界面實(shí)現(xiàn)相關(guān)功能)

    從功能的代碼實(shí)現(xiàn)到界面的展示整個(gè)制作過程全部用Java語言實(shí)現(xiàn)。 ????????1、在idea創(chuàng)建一個(gè)工程文件,在工程文件下創(chuàng)建一個(gè)model模塊,在model模塊下載創(chuàng)建三個(gè)package包分別用來存放(BackEndCode)后端代碼包、(MainExe)主程序包、(WebCode)界面實(shí)現(xiàn)代碼包,再在三個(gè)包中創(chuàng)建如

    2024年02月03日
    瀏覽(17)
  • Unity 控制最終輸出音量

    可以控制Unity最終輸出的音量大小

    2024年02月12日
    瀏覽(87)
  • Unity使用滑動(dòng)條Slider控制AudioSource音量,音量不能及時(shí)改變的問題

    Unity使用滑動(dòng)條Slider控制AudioSource音量,音量不能及時(shí)改變的問題

    個(gè)人遇到的一個(gè)問題: ? ? ? 滑動(dòng)條Slider控制AudioSource音量,雖然音源大小確實(shí)和滑動(dòng)條值同步改變,但是實(shí)際音量并未同步改變, 只有當(dāng)我關(guān)閉UI界面時(shí),音量才會(huì)發(fā)生改變。 這個(gè)問題我試了好久沒有解決,所以干脆換一種思路, 通過滑動(dòng)條控制 AudioMixer 控制音量大小 使

    2023年04月24日
    瀏覽(87)
  • Android Audio音量設(shè)置原理流程分析

    Android Audio音量設(shè)置原理流程分析

    本篇文章主要介紹Android音量設(shè)置從App應(yīng)用層到framework層執(zhí)行流程,以及相關(guān)的細(xì)節(jié)和原理分析,建議在閱讀此文章前去看博主的混音理論篇的聲音的音量屬性和聲音相關(guān)公式的推導(dǎo)章節(jié),這對(duì)閱讀時(shí)理解音量等級(jí)、音量分貝計(jì)算有著很大的益處;如果閱讀時(shí)發(fā)現(xiàn)文章有錯(cuò)誤,

    2024年02月15日
    瀏覽(22)
  • JS控制視頻播放、暫停、倍速、音量等功能

    JS控制視頻播放、暫停、倍速、音量等功能

    HTML? CSS: JS:(暫時(shí)沒做優(yōu)化什么的)

    2024年02月11日
    瀏覽(26)
  • 無法登陸路由器管理設(shè)置界面的原因及解決辦法圖文詳細(xì)介紹

    很多朋友高高興興把路由器買回家,也看了說明書。接好網(wǎng)線,輸入額路由器管理地址。不管怎么輸,也嘗試換額幾個(gè)瀏覽器還是無法登陸管理界面。那么路由器無法登陸管理界面怎么辦呢?今天yii666小編就為大家全面的分析下,出現(xiàn)路由器登陸不上的原因與解決辦法。 無法

    2024年02月06日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包