• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共151篇

    Unity - 游戏引擎

关闭

返回栏目

关闭

返回Unity - 游戏引擎栏目

140 - MusicManager.cs - 音效

作者:

贺及楼

成为作者

更新日期:2023-09-17 11:01:19

MusicManager.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Events;
  5. public class MusicManager : BaseManager<MusicManager>
  6. {
  7. //背景音乐
  8. private AudioSource bkMusic = null;
  9. private float bkValue = 1;
  10. //音效
  11. private GameObject soundObj = null;
  12. private List<AudioSource> soundList = new List<AudioSource>();
  13. private float soundValue = 1;
  14. public MusicManager()
  15. {
  16. MonoManager.GetInstance().AddUpdateListener(Update);// 循环删除播放完的音效
  17. }
  18. /// <summary>
  19. /// 循环删除播放完的音效
  20. /// </summary>
  21. private void Update()
  22. {
  23. for(int i = soundList.Count - 1; i >= 0; --i)
  24. {
  25. if (!soundList[i].isPlaying)
  26. {
  27. GameObject.Destroy(soundList[i]);
  28. soundList.RemoveAt(i);
  29. }
  30. }
  31. }
  32. /// <summary>
  33. /// 背景音乐 开始
  34. /// </summary>
  35. /// <param name="name"></param>
  36. public void PlayBackMusic(string name)
  37. {
  38. if (bkMusic == null)
  39. {
  40. GameObject obj = new GameObject();
  41. obj.name = "bkMusic";
  42. bkMusic = obj.AddComponent<AudioSource>();
  43. }
  44. ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/BackMusic/" + name, (clip) => {
  45. bkMusic.clip = clip;
  46. bkMusic.loop = true;//循环
  47. bkMusic.volume = bkValue;
  48. bkMusic.Play();
  49. });
  50. }
  51. /// <summary>
  52. /// 背景音乐 调整
  53. /// </summary>
  54. /// <param name="name"></param>
  55. public void ChangeBackMusic(float v)
  56. {
  57. bkValue = v;
  58. if (bkMusic == null)
  59. return;
  60. bkMusic.volume = bkValue;
  61. }
  62. /// <summary>
  63. /// 背景音乐 暂停
  64. /// </summary>
  65. /// <param name="name"></param>
  66. public void PauseBackMusic(string name)
  67. {
  68. if (bkMusic == null)
  69. return;
  70. bkMusic.Pause();
  71. }
  72. /// <summary>
  73. /// 背景音乐 停止
  74. /// </summary>
  75. /// <param name="name"></param>
  76. public void StopBackMusic(string name)
  77. {
  78. if (bkMusic == null)
  79. return;
  80. bkMusic.Stop();
  81. }
  82. /// <summary>
  83. /// 音效 开始
  84. /// </summary>
  85. /// <param name="name"></param>
  86. /// <param name="isLoop"></param>
  87. /// <param name="callBack"></param>
  88. public void PlaySound(string name,bool isLoop,UnityAction<AudioSource> callBack = null)
  89. {
  90. if (soundObj == null)
  91. {
  92. GameObject obj = new GameObject();
  93. obj.name = "soundObj";
  94. }
  95. //加载资源,加载、加Componen、循环、音量、播放、加列表
  96. ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/Sound/" + name, (clip) => {
  97. AudioSource source = soundObj.AddComponent<AudioSource>();
  98. source.clip = clip;
  99. source.loop = isLoop;
  100. source.volume = soundValue;
  101. source.Play();
  102. soundList.Add(source);
  103. if (callBack != null)
  104. callBack(source);
  105. });
  106. }
  107. /// <summary>
  108. /// 音效 调整音量
  109. /// </summary>
  110. /// <param name="v"></param>
  111. public void ChangeSound(float v)
  112. {
  113. soundValue = v;
  114. for(int i=0; i<soundList.Count; ++i)
  115. soundList[i].volume = soundValue;
  116. }
  117. /// <summary>
  118. /// 音效 停止
  119. /// </summary>
  120. /// <param name="source"></param>
  121. public void StopSound(AudioSource source)
  122. {
  123. if (soundList.Contains(source))
  124. {
  125. soundList.Remove(source);
  126. source.Stop();
  127. GameObject.Destroy(source);
  128. }
  129. }
  130. }