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)!