欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

UnityAudioManager聲音管理器怎么用

本篇內(nèi)容主要講解“Unity AudioManager聲音管理器怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Unity AudioManager聲音管理器怎么用”吧!

10多年的聶榮網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整聶榮建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“聶榮網(wǎng)站設(shè)計(jì)”,“聶榮網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

我們一般會(huì)把音頻分為四類:以農(nóng)場(chǎng)類項(xiàng)目為例

1.背景音樂:全局只有一個(gè),不同的場(chǎng)景不同的時(shí)間不同的天氣都會(huì)有不同的背景音樂,其主要作用是為了烘托氛圍。所以大部分的背景音樂都是2d的且音量是所有音效中最低的,目的為不突兀不刺激為主。

// 播放背景音樂
public void PlayBackgroundMusic(AudioClip clip, bool isLoop = true, float speed = 1)
// 暫停播放背景音樂
public void PauseBackgroundMusic(bool isGradual = true)

2.人聲配音:全局只有一個(gè),經(jīng)常會(huì)用在人物對(duì)話,npc講話等人聲場(chǎng)景下。當(dāng)播放新的聲音時(shí)會(huì)把當(dāng)前的聲音覆蓋掉。

/// 播放單通道音效
public void PlaySingleSound(AudioClip clip, bool isLoop = false, float speed = 1)
/// 暫停播放單通道音效
public void PauseSingleSound(bool isGradual = true)

3.技能ui音效:全局可以多個(gè),在觸發(fā)ui的時(shí)候或者釋放技能的時(shí)候我們的配音是可以多個(gè)可重疊的。

/// 播放多通道音效
 public void PlayMultipleSound(AudioClip clip, bool isLoop = false, float speed = 1)
 /// 停止播放指定的多通道音效
  public void StopMultipleSound(AudioClip clip)

4.世界3d音效:全局可以多個(gè),世界音效其實(shí)就是3d音,我們一般用在固定位置范圍內(nèi)的音效,通過設(shè)置觸發(fā)距離聽到音量不一樣的空間聲音,比如cf的敵人腳步聲。

/// 播放世界音效
public void PlayWorldSound(GameObject attachTarget, AudioClip clip, bool isLoop = false, float speed = 1)
/// 暫停播放指定的世界音效
  public void PauseWorldSound(GameObject attachTarget, bool isGradual = true)

源代碼:

using DG.Tweening;
using System.Collections.Generic;
using UnityEngine;

public delegate void AudAction();
/// <summary>
/// 音頻管理者
/// </summary>
[DisallowMultipleComponent]
public sealed class AudioManager : MonoBehaviour
{
    /// <summary>
    /// 是否靜音初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public bool MuteDefault = false;
    /// <summary>
    /// 背景音樂優(yōu)先級(jí)初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public int BackgroundPriorityDefault = 0;
    /// <summary>
    /// 單通道音效優(yōu)先級(jí)初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public int SinglePriorityDefault = 10;
    /// <summary>
    /// 多通道音效優(yōu)先級(jí)初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public int MultiplePriorityDefault = 20;
    /// <summary>
    /// 世界音效優(yōu)先級(jí)初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public int WorldPriorityDefault = 30;
    /// <summary>
    /// 背景音樂音量初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public float BackgroundVolumeDefault = 0.6f;
    /// <summary>
    /// 單通道音效音量初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public float SingleVolumeDefault = 1;
    /// <summary>
    /// 多通道音效音量初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public float MultipleVolumeDefault = 1;
    /// <summary>
    /// 世界音效音量初始值【請(qǐng)勿在代碼中修改】
    /// </summary>
    public float WorldVolumeDefault = 1;
    /// <summary>
    /// 單通道音效播放結(jié)束事件
    /// </summary>
    public event AudAction SingleSoundEndOfPlayEvent;

    private AudioSource _backgroundAudio;
    private AudioSource _singleAudio;
    private List<AudioSource> _multipleAudios = new List<AudioSource>();
    private Dictionary<GameObject, AudioSource> _worldAudios = new Dictionary<GameObject, AudioSource>();
    private bool _singleSoundPlayDetector = false;
    private bool _isMute = false;
    private int _backgroundPriority = 0;
    private int _singlePriority = 10;
    private int _multiplePriority = 20;
    private int _worldPriority = 30;
    private float _backgroundVolume = 0.6f;
    private float _singleVolume = 1;
    private float _multipleVolume = 1;
    private float _worldVolume = 1;

    public void Awake()
    {
        _backgroundAudio = CreateAudioSource("BackgroundAudio", BackgroundPriorityDefault, BackgroundVolumeDefault, 1, 0);
        _singleAudio = CreateAudioSource("SingleAudio", SinglePriorityDefault, SingleVolumeDefault, 1, 0);

        Mute = MuteDefault;
        BackgroundPriority = BackgroundPriorityDefault;
        SinglePriority = SinglePriorityDefault;
        MultiplePriority = MultiplePriorityDefault;
        WorldPriority = WorldPriorityDefault;
        BackgroundVolume = BackgroundVolumeDefault;
        SingleVolume = SingleVolumeDefault;
        MultipleVolume = MultipleVolumeDefault;
        WorldVolume = WorldVolumeDefault;
    }

    public void Start()
    {
        StopBackgroundMusic();
        StopSingleSound();
        StopAllMultipleSound();
        StopAllWorldSound();
    }

    public void Update()
    {
        if (_singleSoundPlayDetector)
        {
            if (!_singleAudio.isPlaying)
            {
                _singleSoundPlayDetector = false;
                SingleSoundEndOfPlayEvent?.Invoke();
            }
        }
    }

    /// <summary>
    /// 靜音
    /// </summary>
    public bool Mute
    {
        get
        {
            return _isMute;
        }
        set
        {
            if (_isMute != value)
            {
                _isMute = value;
                _backgroundAudio.mute = _isMute;
                _singleAudio.mute = _isMute;
                for (int i = 0; i < _multipleAudios.Count; i++)
                {
                    _multipleAudios[i].mute = _isMute;
                }
                foreach (var audio in _worldAudios)
                {
                    audio.Value.mute = _isMute;
                }
            }
        }
    }
    /// <summary>
    /// 背景音樂優(yōu)先級(jí)
    /// </summary>
    public int BackgroundPriority
    {
        get
        {
            return _backgroundPriority;
        }
        set
        {
            if (_backgroundPriority != value)
            {
                _backgroundPriority = value;
                _backgroundAudio.priority = _backgroundPriority;
            }
        }
    }
    /// <summary>
    /// 單通道音效優(yōu)先級(jí)
    /// </summary>
    public int SinglePriority
    {
        get
        {
            return _singlePriority;
        }
        set
        {
            if (_singlePriority != value)
            {
                _singlePriority = value;
                _singleAudio.priority = _singlePriority;
            }
        }
    }
    /// <summary>
    /// 多通道音效優(yōu)先級(jí)
    /// </summary>
    public int MultiplePriority
    {
        get
        {
            return _multiplePriority;
        }
        set
        {
            if (_multiplePriority != value)
            {
                _multiplePriority = value;
                for (int i = 0; i < _multipleAudios.Count; i++)
                {
                    _multipleAudios[i].priority = _multiplePriority;
                }
            }
        }
    }
    /// <summary>
    /// 世界音效優(yōu)先級(jí)
    /// </summary>
    public int WorldPriority
    {
        get
        {
            return _worldPriority;
        }
        set
        {
            if (_worldPriority != value)
            {
                _worldPriority = value;
                foreach (var audio in _worldAudios)
                {
                    audio.Value.priority = _worldPriority;
                }
            }
        }
    }
    /// <summary>
    /// 背景音樂音量
    /// </summary>
    public float BackgroundVolume
    {
        get
        {
            return _backgroundVolume;
        }
        set
        {
            if (!Mathf.Approximately(_backgroundVolume, value))
            {
                _backgroundVolume = value;
                _backgroundAudio.volume = _backgroundVolume;
            }
        }
    }
    /// <summary>
    /// 單通道音效音量
    /// </summary>
    public float SingleVolume
    {
        get
        {
            return _singleVolume;
        }
        set
        {
            if (!Mathf.Approximately(_singleVolume, value))
            {
                _singleVolume = value;
                _singleAudio.volume = _singleVolume;
            }
        }
    }
    /// <summary>
    /// 多通道音效音量
    /// </summary>
    public float MultipleVolume
    {
        get
        {
            return _multipleVolume;
        }
        set
        {

            if (!Mathf.Approximately(_multipleVolume, value))
            {
                _multipleVolume = value;
                for (int i = 0; i < _multipleAudios.Count; i++)
                {
                    _multipleAudios[i].volume = _multipleVolume;
                }
            }
        }
    }
    /// <summary>
    /// 世界音效音量
    /// </summary>
    public float WorldVolume
    {
        get
        {
            return _worldVolume;
        }
        set
        {
            if (!Mathf.Approximately(_worldVolume, value))
            {
                _worldVolume = value;
                foreach (var audio in _worldAudios)
                {
                    audio.Value.volume = _worldVolume;
                }
            }
        }
    }

    /// <summary>
    /// 播放背景音樂
    /// </summary>
    /// <param name="clip">音樂剪輯</param>
    /// <param name="isLoop">是否循環(huán)</param>
    /// <param name="speed">播放速度</param>
    public void PlayBackgroundMusic(AudioClip clip, bool isLoop = true, float speed = 1)
    {
        if (_backgroundAudio.isPlaying)
        {
            _backgroundAudio.Stop();
        }

        _backgroundAudio.clip = clip;
        _backgroundAudio.loop = isLoop;
        _backgroundAudio.pitch = speed;
        _backgroundAudio.Play();
    }
    /// <summary>
    /// 暫停播放背景音樂
    /// </summary>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void PauseBackgroundMusic(bool isGradual = true)
    {
        if (isGradual)
        {
            _backgroundAudio.DOFade(0, 2).OnComplete(() =>
            {
                _backgroundAudio.volume = BackgroundVolume;
                _backgroundAudio.Pause();
            });
        }
        else
        {
            _backgroundAudio.Pause();
        }
    }
    /// <summary>
    /// 恢復(fù)播放背景音樂
    /// </summary>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void UnPauseBackgroundMusic(bool isGradual = true)
    {
        if (isGradual)
        {
            _backgroundAudio.UnPause();
            _backgroundAudio.volume = 0;
            _backgroundAudio.DOFade(BackgroundVolume, 2);
        }
        else
        {
            _backgroundAudio.UnPause();
        }
    }
    /// <summary>
    /// 停止播放背景音樂
    /// </summary>
    public void StopBackgroundMusic()
    {
        if (_backgroundAudio.isPlaying)
        {
            _backgroundAudio.Stop();
        }
    }

    /// <summary>
    /// 播放單通道音效
    /// </summary>
    /// <param name="clip">音樂剪輯</param>
    /// <param name="isLoop">是否循環(huán)</param>
    /// <param name="speed">播放速度</param>
    public void PlaySingleSound(AudioClip clip, bool isLoop = false, float speed = 1)
    {
        if (_singleAudio.isPlaying)
        {
            _singleAudio.Stop();
        }

        _singleAudio.clip = clip;
        _singleAudio.loop = isLoop;
        _singleAudio.pitch = speed;
        _singleAudio.Play();
        _singleSoundPlayDetector = true;
    }
    /// <summary>
    /// 暫停播放單通道音效
    /// </summary>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void PauseSingleSound(bool isGradual = true)
    {
        if (isGradual)
        {
            _singleAudio.DOFade(0, 2).OnComplete(() =>
            {
                _singleAudio.volume = SingleVolume;
                _singleAudio.Pause();
            });
        }
        else
        {
            _singleAudio.Pause();
        }
    }
    /// <summary>
    /// 恢復(fù)播放單通道音效
    /// </summary>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void UnPauseSingleSound(bool isGradual = true)
    {
        if (isGradual)
        {
            _singleAudio.UnPause();
            _singleAudio.volume = 0;
            _singleAudio.DOFade(SingleVolume, 2);
        }
        else
        {
            _singleAudio.UnPause();
        }
    }
    /// <summary>
    /// 停止播放單通道音效
    /// </summary>
    public void StopSingleSound()
    {
        if (_singleAudio.isPlaying)
        {
            _singleAudio.Stop();
        }
    }

    /// <summary>
    /// 播放多通道音效
    /// </summary>
    /// <param name="clip">音樂剪輯</param>
    /// <param name="isLoop">是否循環(huán)</param>
    /// <param name="speed">播放速度</param>
    public void PlayMultipleSound(AudioClip clip, bool isLoop = false, float speed = 1)
    {
        AudioSource audio = ExtractIdleMultipleAudioSource();
        audio.clip = clip;
        audio.loop = isLoop;
        audio.pitch = speed;
        audio.Play();
    }
    /// <summary>
    /// 停止播放指定的多通道音效
    /// </summary>
    /// <param name="clip">音樂剪輯</param>
    public void StopMultipleSound(AudioClip clip)
    {
        for (int i = 0; i < _multipleAudios.Count; i++)
        {
            if (_multipleAudios[i].isPlaying)
            {
                if (_multipleAudios[i].clip == clip)
                {
                    _multipleAudios[i].Stop();
                }
            }
        }
    }
    /// <summary>
    /// 停止播放所有多通道音效
    /// </summary>
    public void StopAllMultipleSound()
    {
        for (int i = 0; i < _multipleAudios.Count; i++)
        {
            if (_multipleAudios[i].isPlaying)
            {
                _multipleAudios[i].Stop();
            }
        }
    }
    /// <summary>
    /// 銷毀所有閑置中的多通道音效的音源
    /// </summary>
    public void ClearIdleMultipleAudioSource()
    {
        for (int i = 0; i < _multipleAudios.Count; i++)
        {
            if (!_multipleAudios[i].isPlaying)
            {
                AudioSource audio = _multipleAudios[i];
                _multipleAudios.RemoveAt(i);
                i -= 1;
                Destroy(audio.gameObject);
            }
        }
    }

    /// <summary>
    /// 播放世界音效
    /// </summary>
    /// <param name="attachTarget">附加目標(biāo)</param>
    /// <param name="clip">音樂剪輯</param>
    /// <param name="isLoop">是否循環(huán)</param>
    /// <param name="speed">播放速度</param>
    public void PlayWorldSound(GameObject attachTarget, AudioClip clip, bool isLoop = false, float speed = 1)
    {
        if (_worldAudios.ContainsKey(attachTarget))
        {
            AudioSource audio = _worldAudios[attachTarget];
            if (audio.isPlaying)
            {
                audio.Stop();
            }
            audio.clip = clip;
            audio.loop = isLoop;
            audio.pitch = speed;
            audio.Play();
        }
        else
        {
            AudioSource audio = AttachAudioSource(attachTarget, WorldPriority, WorldVolume, 1, 1);
            _worldAudios.Add(attachTarget, audio);
            audio.clip = clip;
            audio.loop = isLoop;
            audio.pitch = speed;
            audio.Play();
        }
    }
    /// <summary>
    /// 暫停播放指定的世界音效
    /// </summary>
    /// <param name="attachTarget">附加目標(biāo)</param>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void PauseWorldSound(GameObject attachTarget, bool isGradual = true)
    {
        if (_worldAudios.ContainsKey(attachTarget))
        {
            AudioSource audio = _worldAudios[attachTarget];
            if (isGradual)
            {
                audio.DOFade(0, 2).OnComplete(() =>
                {
                    audio.volume = WorldVolume;
                    audio.Pause();
                });
            }
            else
            {
                audio.Pause();
            }
        }
    }
    /// <summary>
    /// 恢復(fù)播放指定的世界音效
    /// </summary>
    /// <param name="attachTarget">附加目標(biāo)</param>
    /// <param name="isGradual">是否漸進(jìn)式</param>
    public void UnPauseWorldSound(GameObject attachTarget, bool isGradual = true)
    {
        if (_worldAudios.ContainsKey(attachTarget))
        {
            AudioSource audio = _worldAudios[attachTarget];
            if (isGradual)
            {
                audio.UnPause();
                audio.volume = 0;
                audio.DOFade(WorldVolume, 2);
            }
            else
            {
                audio.UnPause();
            }
        }
    }
    /// <summary>
    /// 停止播放所有的世界音效
    /// </summary>
    public void StopAllWorldSound()
    {
        foreach (var audio in _worldAudios)
        {
            if (audio.Value.isPlaying)
            {
                audio.Value.Stop();
            }
        }
    }
    /// <summary>
    /// 銷毀所有閑置中的世界音效的音源
    /// </summary>
    public void ClearIdleWorldAudioSource()
    {
        HashSet<GameObject> removeSet = new HashSet<GameObject>();
        foreach (var audio in _worldAudios)
        {
            if (!audio.Value.isPlaying)
            {
                removeSet.Add(audio.Key);
                Destroy(audio.Value);
            }
        }
        foreach (var item in removeSet)
        {
            _worldAudios.Remove(item);
        }
    }

    //創(chuàng)建一個(gè)音源
    private AudioSource CreateAudioSource(string name, int priority, float volume, float speed, float spatialBlend)
    {
        GameObject audioObj = new GameObject(name);
        audioObj.transform.SetParent(transform);
        audioObj.transform.localPosition = Vector3.zero;
        audioObj.transform.localRotation = Quaternion.identity;
        audioObj.transform.localScale = Vector3.one;
        AudioSource audio = audioObj.AddComponent<AudioSource>();
        audio.playOnAwake = false;
        audio.priority = priority;
        audio.volume = volume;
        audio.pitch = speed;
        audio.spatialBlend = spatialBlend;
        audio.mute = _isMute;
        return audio;
    }
    //附加一個(gè)音源
    private AudioSource AttachAudioSource(GameObject target, int priority, float volume, float speed, float spatialBlend)
    {
        AudioSource audio = target.AddComponent<AudioSource>();
        audio.playOnAwake = false;
        audio.priority = priority;
        audio.volume = volume;
        audio.pitch = speed;
        audio.spatialBlend = spatialBlend;
        audio.mute = _isMute;
        return audio;
    }
    //提取閑置中的多通道音源
    private AudioSource ExtractIdleMultipleAudioSource()
    {
        for (int i = 0; i < _multipleAudios.Count; i++)
        {
            if (!_multipleAudios[i].isPlaying)
            {
                return _multipleAudios[i];
            }
        }

        AudioSource audio = CreateAudioSource("MultipleAudio", MultiplePriority, MultipleVolume, 1, 0);
        _multipleAudios.Add(audio);
        return audio;
    }
}

到此,相信大家對(duì)“Unity AudioManager聲音管理器怎么用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

本文名稱:UnityAudioManager聲音管理器怎么用
分享路徑:http://aaarwkj.com/article24/ipdije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、網(wǎng)站導(dǎo)航、微信公眾號(hào)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
色婷婷精品二区久久蜜臀av| 九色91成人在线视频| 久久久久久97精品| 92午夜福利在线视频| 国产一区二区三区午夜视频| 国产欧美一区二区三区久久| 久久久人妻91久久久久| 欧美日韩在线视频一区| 国产精品99久久久久久宅男九| 精品国产一区二区av麻豆| 91欧美精品综合在线| 欧美黄片网站在线观看| 国产剧情av一区在线观看| 亚洲国产丁香综合激情啪| 一区二区在线视频免费播放| 欧美午夜精品福利在线观看| 国产精品久久久久久老熟女| 麻豆精品国产粉嫩av| 欧美香蕉一区二区视频| 亚洲91精品一区二区三区| 成人做爰片免费看视频| 美女爽到高潮久久久| 欧美日韩亚洲中文综合网| 国产高清自拍视频免费| 国产放荡av剧情精品| 亚洲欧美不卡一区二区| 国产欧美日韩亚洲综合在线| 亚洲香蕉av一区二区蜜桃| 一区二区三区一级黄色| 尤物在线观看精品视频| 国产成人综合亚洲欧美在线| 国语自产拍在线观看不卡| 好吊精品视频在线观看| 亚洲午夜天堂在线a毛片| 免费人成黄页网站在线播放国产| 免费黄色日韩在线观看| 永久免费成人在线视频| 91九色视频免费观看| 欧美亚洲国产青草久久| 日韩精品极品在线视频观看免费| 99热只有这里才有精品|