自学内容网 自学内容网

MicroAudio - Audio manager

免费插件:AudioManager,不用再写音效管理了。

using Microlight.MicroAudio;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InfinityPanel : MonoBehaviour
{
    [Header("Infinity Sounds")]
    [SerializeField] MicroInfinitySoundGroup microInfinitySoundGroup;
    [SerializeField] Button playInfinityButton;
    [SerializeField] Button pauseInfinityButton;
    [SerializeField] Button stopInfinityButton;

    private void Awake()
    {
        playInfinityButton.onClick.AddListener(PlayInfinitySound);
        pauseInfinityButton.onClick.AddListener(PauseInfinitySound);
        stopInfinityButton.onClick.AddListener(StopInfinitySound);
    }


    #region Infinity Sound
    MicroInfinityInstance infinityInstance;
    public void PlayInfinitySound()
    {
        infinityInstance = MicroAudio.PlayInfinityEffectSound(microInfinitySoundGroup);
        infinityInstance.OnEnd += InfinitySoundEnded;
        pauseInfinityButton.interactable = true;
        stopInfinityButton.interactable = true;
        playInfinityButton.interactable = false;
    }
    void InfinitySoundEnded(MicroInfinityInstance instance)
    {
        infinityInstance.OnEnd -= InfinitySoundEnded;
        infinityInstance = null;
        pauseInfinityButton.interactable = false;
        stopInfinityButton.interactable = false;
        playInfinityButton.interactable = true;
    }
    public void PauseInfinitySound()
    {
        if (infinityInstance == null) return;
        else if (infinityInstance.IsPaused) infinityInstance.Resume();
        else infinityInstance.Pause();
    }
    public void StopInfinitySound()
    {
        if (infinityInstance == null) return;
        infinityInstance.Stop();
    }
    #endregion
}
using Microlight.MicroAudio;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MusicPanel : MonoBehaviour
{
    private MicroSoundGroup group;

    public Button btn_LoopTrack;

    public Button btn_PlayMusicGround;
    public Button btn_PauseMusic;
    public Button btn_StopMusic;

    [Header("【Music】")]
    [SerializeField] AudioClip musicLoopTrack;

    [Space]
    [Header("【MusicGround】")]
    /// <summary>
    /// ScriptableObject文件
    /// </summary>
    [SerializeField] MicroSoundGroup musicGroup;
    /// <summary>
    /// 是否打乱重新组合
    /// </summary>
    [SerializeField] Toggle shuffleToggle;
    /// <summary>
    /// 淡入淡出Slider
    /// </summary>
    [SerializeField] Slider crossfadeSlider;
    /// <summary>
    /// 播放进度
    /// </summary>
    [SerializeField] Slider sld_PlayProgress;
    [SerializeField] Text txt_CurtClipName;
    [SerializeField] Button btn_Previous;
    [SerializeField] Button btn_Next;

    [Space]
    [Header("【Crossfade】")]
    [SerializeField] Slider crossfadeProgressSlider;
    [SerializeField] Text crossfadeFromTrack;
    [SerializeField] Text crossfadeToTrack;
    private SoundFade crossfade;

    private void Awake()
    {
        Debug.Log($"Music音量为:{MicroAudio.MusicVolume}");

        MicroAudio.OnNewPlaylist += UpdatePlaylistTrackNames;
        MicroAudio.OnTrackStart += UpdatePlaylistStatus;
        MicroAudio.OnTrackEnd += UpdatePlaylistStatus;
        MicroAudio.OnMusicPausedChanged += MusicPaused;
        MicroAudio.OnMusicStopped += UpdatePlaylistStatus;
        MicroAudio.OnCrossfadeStart += CrossfadeStarted;
        MicroAudio.OnCrossfadeEnd += CrossfadeEnded;

        crossfadeProgressSlider.gameObject.SetActive(false);
        crossfadeFromTrack.gameObject.SetActive(false);
        crossfadeToTrack.gameObject.SetActive(false);
    }

    private void Start()
    {
        btn_LoopTrack.onClick.AddListener(LoopOne);
        btn_PlayMusicGround.onClick.AddListener(PlayMusicGroup);
        btn_Previous.onClick.AddListener(PreviousTrack);
        btn_Next.onClick.AddListener(NextTrack);
        btn_PauseMusic.onClick.AddListener(PauseMusic);
        btn_StopMusic.onClick.AddListener(StopMusic);
    }


    private void Update()
    {
        sld_PlayProgress.value = MicroAudio.CurrentTrackProgress;

        if (crossfade != null && crossfade.IsPaused) crossfadeProgressSlider.value = crossfade.Progress;
        else if (crossfade != null && !crossfade.IsPaused) CrossfadeEnded(crossfade);
    }
    #region Music

    /// <summary>
    /// 单曲循环
    /// </summary>
    public void LoopOne()
    {
        MicroAudio.PlayOneTrack(musicLoopTrack);
    }

    /// <summary>
    /// 播放音乐列表
    /// </summary>
    public void PlayMusicGroup()
    {
        MicroAudio.PlayMusicGroup(musicGroup, shuffleToggle.isOn, 1f, crossfadeSlider.value);
    }

    public void NextTrack()
    {
        MicroAudio.NextTrack();
    }
    public void PreviousTrack()
    {
        MicroAudio.PreviousTrack();
    }
    public void PauseMusic()
    {
        MicroAudio.ToggleMusicPause();
    }
    public void StopMusic()
    {
        MicroAudio.StopMusic();
    }
    #endregion

    #region Music Status 状态

    void UpdatePlaylistTrackNames(List<int> playlist, MicroSoundGroup group)
    {
        this.group = group;
        UpdatePlaylistStatus();
    }

    void MusicPaused(bool isPaused)
    {
        UpdatePlaylistStatus();
    }

    void UpdatePlaylistStatus()
    {
        Debug.Log("更新播放列表状态");

        if (MicroAudio.MusicAudioSource.isPlaying)
        {
            btn_PauseMusic.transform.Find("Text (Legacy)").GetComponent<Text>().text = "Pause";
            btn_PauseMusic.interactable = true;
            btn_StopMusic.interactable = true;
        }
        else if (MicroAudio.MusicAudioSource.time > 0)
        {
            if (MicroAudio.IsMusicPaused)
            {
                btn_PauseMusic.transform.Find("Text (Legacy)").GetComponent<Text>().text = "Resume";
            }
            else
            {
                btn_PauseMusic.transform.Find("Text (Legacy)").GetComponent<Text>().text = "Pause";
            }
            btn_PauseMusic.interactable = true;
            btn_StopMusic.interactable = true;
        }
        else
        {
            btn_PauseMusic.transform.Find("Text (Legacy)").GetComponent<Text>().text = "Pause";
            btn_PauseMusic.interactable = false;
            btn_StopMusic.interactable = false;
        }

        if (MicroAudio.MusicGroup == null) return;
        Debug.Log($"{group.ClipList[MicroAudio.MusicPlaylistIndex].name}");
        txt_CurtClipName.text = group.ClipList[MicroAudio.MusicPlaylistIndex].name;
        //txt_CurtClipName.text = MicroAudio.MusicAudioSource.clip.name;
    }
    void CrossfadeStarted(SoundFade fade)
    {
        // Display crossfade status
        crossfadeProgressSlider.gameObject.SetActive(true);
        crossfadeFromTrack.gameObject.SetActive(true);
        crossfadeToTrack.gameObject.SetActive(true);

        crossfade = fade;

        if (MicroAudio.CrossfadeAudioSource.clip != null) crossfadeFromTrack.text = MicroAudio.CrossfadeAudioSource.clip.name;
        if (MicroAudio.MusicAudioSource.clip != null) crossfadeToTrack.text = MicroAudio.MusicAudioSource.clip.name;
    }
    void CrossfadeEnded(SoundFade fade)
    {
        // Hide crossfade status
        crossfadeProgressSlider.gameObject.SetActive(false);
        crossfadeFromTrack.gameObject.SetActive(false);
        crossfadeToTrack.gameObject.SetActive(false);

        crossfade = null;
    }
    #endregion
}
using Microlight.MicroAudio;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SFXPanel : MonoBehaviour
{
    public Button btn_SFXClip1;
    public Button btn_SFXClip2;

    public Button btn_SFXClipDelayed;
    public Text txt_DelayTime;
    public Slider sld_DelayTime;

    [Header("SFX")]
    [SerializeField] AudioClip SFXClip1;
    [SerializeField] AudioClip SFXClip2;
    [SerializeField] AudioClip SFXClipDelayed;
    private void Awake()
    {
        Debug.Log($"UI音效音量为:{MicroAudio.SFXVolume}");
    }

    private void Start()
    {
        btn_SFXClip1.onClick.AddListener(SFXButton1);
        btn_SFXClip2.onClick.AddListener(SFXButton2);
        btn_SFXClipDelayed.onClick.AddListener(SFXButtonDelay);
        sld_DelayTime.onValueChanged.AddListener((val) => {
            txt_DelayTime.text = $"延迟时间:{val}s";
        });
    }

    #region UI Sounds Controls
    public void SFXButton1()
    {
        MicroAudio.PlayEffectSound(SFXClip1);
    }
    public void SFXButton2()
    {
        MicroAudio.PlayEffectSound(SFXClip2);
    }
    public void SFXButtonDelay()
    {
        MicroAudio.PlayEffectSound(SFXClipDelayed, sld_DelayTime.value);
    }
    #endregion
}
using Microlight.MicroAudio;
using UnityEngine;
using UnityEngine.UI;

public class UIEffectsPanel : MonoBehaviour
{
    public Button btn_uiClip1;
    public Button btn_uiClip2;

    public Button btn_uiClipDelayed;
    public Text txt_DelayTime;
    public Slider sld_DelayTime;

    [Header("UI")]
    [SerializeField] AudioClip uiClip1;
    [SerializeField] AudioClip uiClip2;
    [SerializeField] AudioClip uiClipDelayed;
    private void Awake()
    {
        Debug.Log($"UI音效音量为:{MicroAudio.UIVolume}");
    }

    private void Start()
    {
        btn_uiClip1.onClick.AddListener(UIButton1);
        btn_uiClip2.onClick.AddListener(UIButton2);
        btn_uiClipDelayed.onClick.AddListener(UIButtonDelay);
        sld_DelayTime.onValueChanged.AddListener((val)=> {
            txt_DelayTime.text = $"延迟时间:{val}s";
        });
    }

    #region UI Sounds Controls
    public void UIButton1()
    {
        MicroAudio.PlayUISound(uiClip1);
    }
    public void UIButton2()
    {
        MicroAudio.PlayUISound(uiClip2);
    }
    public void UIButtonDelay()
    {
        MicroAudio.PlayUISound(uiClipDelayed, sld_DelayTime.value);
    }
    #endregion
}
using Microlight.MicroAudio;
using UnityEngine;
using UnityEngine.UI;

public class VolumePanel : MonoBehaviour
{
    //MasterVolume主通道音量
    //MusicVolume音乐频道音量
    //SoundsVolume声音通道音量
    //SFXVolume声音效果通道音量
    //UIVolume UI通道音量
    [Header("Volume")]
    [SerializeField] Slider masterVolumeSlider;
    [SerializeField] Slider musicVolumeSlider;
    [SerializeField] Slider soundsVolumeSlider;
    [SerializeField] Slider sfxVolumeSlider;
    [SerializeField] Slider uiVolumeSlider;
    [Space]
    [SerializeField] Text masterVolumeText;
    [SerializeField] Text musicVolumeText;
    [SerializeField] Text soundsVolumeText;
    [SerializeField] Text sfxVolumeText;
    [SerializeField] Text uiVolumeText;

    [Header("Misc")]
    [SerializeField] AudioClip checkVolumeClip;
    DelayedSound volumePingTest;   // 在改变值时测试声音效果的音量
    const float pingTestDelay = 0.25f;


    private void Start()
    {
        masterVolumeSlider.onValueChanged.AddListener(OnMasterVolumeChange);
        musicVolumeSlider.onValueChanged.AddListener(OnMusicVolumeChange);
        soundsVolumeSlider.onValueChanged.AddListener(OnSoundsVolumeChange);
        sfxVolumeSlider.onValueChanged.AddListener(OnSFXVolumeChange);
        uiVolumeSlider.onValueChanged.AddListener(OnUIVolumeChange);

        Debug.Log(MicroAudio.MasterVolume);
        Debug.Log(MicroAudio.MusicVolume);
        Debug.Log(MicroAudio.SoundsVolume);
        Debug.Log(MicroAudio.SFXVolume);
        Debug.Log(MicroAudio.UIVolume);
        masterVolumeSlider.value = MicroAudio.MasterVolume;
        musicVolumeSlider.value = MicroAudio.MusicVolume;
        soundsVolumeSlider.value = MicroAudio.SoundsVolume;
        sfxVolumeSlider.value = MicroAudio.SFXVolume;
        uiVolumeSlider.value = MicroAudio.UIVolume;
    }


    #region Volume Controls
    public void OnMasterVolumeChange(float val)
    {
        MicroAudio.MasterVolume = val;
        MicroAudio.SaveSettings();
        masterVolumeText.text = ((int)(masterVolumeSlider.value * 100)).ToString();
    }
    public void OnMusicVolumeChange(float val)
    {
        MicroAudio.MusicVolume = val;
        MicroAudio.SaveSettings();
        musicVolumeText.text = ((int)(musicVolumeSlider.value * 100)).ToString();
    }
    public void OnSoundsVolumeChange(float val)
    {
        MicroAudio.SoundsVolume = val;
        MicroAudio.SaveSettings();
        soundsVolumeText.text = ((int)(soundsVolumeSlider.value * 100)).ToString();
        StartVolumeTestPing(1);
    }
    public void OnSFXVolumeChange(float val)
    {
        MicroAudio.SFXVolume = val;
        MicroAudio.SaveSettings();
        sfxVolumeText.text = ((int)(sfxVolumeSlider.value * 100)).ToString();
        StartVolumeTestPing(1);
    }
    public void OnUIVolumeChange(float val)
    {
        MicroAudio.UIVolume = val;
        MicroAudio.SaveSettings();
        uiVolumeText.text = ((int)(uiVolumeSlider.value * 100)).ToString();
        StartVolumeTestPing(0);
    }
    void StartVolumeTestPing(int layer)
    {
        // If already runing, reset 如果已经运行,请重置
        if (volumePingTest != null && volumePingTest.Progress < 1f)
        {
            volumePingTest.ResetTimer();
            return;
        }

        if (layer == 0)
        {
            AudioSource src = MicroAudio.PlayUISound(checkVolumeClip, pingTestDelay);
            volumePingTest = MicroAudio.GetDelayStatusOfSound(src);
        }
        else
        {
            AudioSource src = MicroAudio.PlayEffectSound(checkVolumeClip, pingTestDelay);
            volumePingTest = MicroAudio.GetDelayStatusOfSound(src);
        }
    }
    #endregion

}


原文地址:https://blog.csdn.net/Edision_li/article/details/136388652

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!