AudioManager.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public enum Clip
  5. {
  6. BtnClip,
  7. SkillClip,
  8. ErrorClip,
  9. DropClip,
  10. CloseClip,
  11. FlowerClip,
  12. BubbleClip,
  13. CurrentClip,
  14. MiniEndClip,
  15. }
  16. public class AudioManager : Regist
  17. {
  18. #region 变量
  19. public static bool Audio = true;
  20. public static bool Music = true;
  21. public static Coroutine CoroTheme;
  22. public static Coroutine CoroMiniGame;
  23. public static Coroutine CoroPartyTheme;
  24. public static AudioManager Instance;
  25. public static AudioClip BtnClip;
  26. public static AudioClip SkillClip;
  27. public static AudioClip ErrorClip;
  28. public static AudioClip DropClip;
  29. public static AudioClip CloseClip;
  30. public static AudioClip FlowerClip;
  31. public static AudioClip BubbleClip;
  32. public static AudioClip CurrentClip;
  33. public static AudioClip MiniEndClip;
  34. public static AudioSource MusicClip;
  35. public static AudioSource MusicMini;
  36. public static AudioSource MusicTheme;
  37. public static AudioSource MusicPartyTheme;
  38. public static Dictionary<Clip, AudioClip> ClipDic = new Dictionary<Clip, AudioClip>();
  39. #endregion
  40. public override void InstantiatePrefabs()
  41. {
  42. BtnClip = ResourceManager.Load<AudioClip>("BtnClip", Folder.Audio);
  43. SkillClip = ResourceManager.Load<AudioClip>("SkillClip", Folder.Audio);
  44. ErrorClip = ResourceManager.Load<AudioClip>("ErrorClip", Folder.Audio);
  45. DropClip = ResourceManager.Load<AudioClip>("DropClip", Folder.Audio);
  46. CloseClip = ResourceManager.Load<AudioClip>("CloseClip", Folder.Audio);
  47. FlowerClip = ResourceManager.Load<AudioClip>("FlowerClip", Folder.Audio);
  48. BubbleClip = ResourceManager.Load<AudioClip>("BubbleClip", Folder.Audio);
  49. CurrentClip = ResourceManager.Load<AudioClip>("CurrentClip", Folder.Audio);
  50. MiniEndClip = ResourceManager.Load<AudioClip>("MiniEndClip", Folder.Audio);
  51. ResourceManager.Get("Music", Folder.Audio, true, transform, true, ObjType.Music);
  52. }
  53. public override void FirstInit()
  54. {
  55. Instance = this;
  56. #region ClipDic
  57. ClipDic.Add(Clip.BtnClip, BtnClip);
  58. ClipDic.Add(Clip.SkillClip, SkillClip);
  59. ClipDic.Add(Clip.ErrorClip, ErrorClip);
  60. ClipDic.Add(Clip.DropClip, DropClip);
  61. ClipDic.Add(Clip.CloseClip, CloseClip);
  62. ClipDic.Add(Clip.FlowerClip, FlowerClip);
  63. ClipDic.Add(Clip.BubbleClip, BubbleClip);
  64. ClipDic.Add(Clip.CurrentClip, CurrentClip);
  65. ClipDic.Add(Clip.MiniEndClip, MiniEndClip);
  66. #endregion
  67. #region MusicMini
  68. TweenAudio tween = MusicMini.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  69. tween.OnForwardStart += () =>
  70. {
  71. if (Music)
  72. {
  73. MusicMini.Play();
  74. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  75. }
  76. };
  77. tween.OnBackwardStart += () =>
  78. {
  79. if (Music)
  80. {
  81. StopCoroutine(CoroTheme);
  82. }
  83. };
  84. #endregion
  85. #region MusicTheme
  86. tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  87. tween.OnForwardStart += () =>
  88. {
  89. if (Music)
  90. {
  91. MusicTheme.Play();
  92. CoroTheme = StartCoroutine(Loop(MusicTheme));
  93. }
  94. };
  95. tween.OnBackwardStart += () =>
  96. {
  97. if (Music)
  98. {
  99. StopCoroutine(CoroTheme);
  100. }
  101. };
  102. #endregion
  103. #region MusicPartyTheme
  104. tween = MusicPartyTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  105. tween.OnForwardStart += () =>
  106. {
  107. if (Music)
  108. {
  109. MusicPartyTheme.Play();
  110. CoroPartyTheme = StartCoroutine(Loop(MusicPartyTheme));
  111. }
  112. };
  113. tween.OnBackwardStart += () =>
  114. {
  115. if (Music)
  116. {
  117. StopCoroutine(CoroPartyTheme);
  118. }
  119. };
  120. #endregion
  121. if (!Music)
  122. {
  123. ResourceManager.SetActive(ObjectLabel.L_MusicOn, false);
  124. ResourceManager.SetActive(ObjectLabel.L_MusicOff, true);
  125. }
  126. if (!Audio)
  127. {
  128. ResourceManager.SetActive(ObjectLabel.L_AudioOn, false);
  129. ResourceManager.SetActive(ObjectLabel.L_AudioOff, true);
  130. }
  131. }
  132. public override void RegistReference()
  133. {
  134. AudioSource[] audioSources = ResourceManager.Gets<AudioSource>("Music");
  135. MusicClip = audioSources[2];
  136. MusicMini = audioSources[1];
  137. MusicTheme = audioSources[0];
  138. MusicPartyTheme = audioSources[3];
  139. }
  140. public static void PlayClip(Clip clip)
  141. {
  142. if (Audio)
  143. {
  144. AudioClip audioClip = ClipDic[clip];
  145. MusicClip.PlayOneShot(audioClip);
  146. }
  147. }
  148. public static void InitAudioSettingFromPlayerPrefs()
  149. {
  150. Audio = PlayerPrefs.GetInt(Lib.AudioPrefs, 1).ToBool();
  151. Music = PlayerPrefs.GetInt(Lib.MusicPrefs, 1).ToBool();
  152. }
  153. public static void SetLogoVolume()
  154. {
  155. if (!Audio || !Music)
  156. {
  157. GameObject.Find("LOGO0005").GetComponent<AudioSource>().volume = 0;
  158. }
  159. }
  160. public void MusicSwitch()
  161. {
  162. if (Music)
  163. {
  164. Music = false;
  165. ResourceManager.SetActive(ObjectLabel.L_MusicOn, false);
  166. ResourceManager.SetActive(ObjectLabel.L_MusicOff, true);
  167. MusicMini.Pause();
  168. MusicTheme.Pause();
  169. MusicPartyTheme.Pause();
  170. PlayerPrefs.SetInt(Lib.MusicPrefs, 0);
  171. }
  172. else
  173. {
  174. Music = true;
  175. ResourceManager.SetActive(ObjectLabel.L_MusicOn, true);
  176. ResourceManager.SetActive(ObjectLabel.L_MusicOff, false);
  177. MusicMini.UnPause();
  178. MusicPartyTheme.UnPause();
  179. if (MusicTheme.isPlaying)
  180. {
  181. MusicTheme.UnPause();
  182. }
  183. else
  184. {
  185. MusicTheme.TweenReForAudio();
  186. }
  187. PlayerPrefs.SetInt(Lib.MusicPrefs, 1);
  188. }
  189. }
  190. public void AudioSwitch()
  191. {
  192. if (Audio)
  193. {
  194. Audio = false;
  195. ResourceManager.SetActive(ObjectLabel.L_AudioOn, false);
  196. ResourceManager.SetActive(ObjectLabel.L_AudioOff, true);
  197. PlayerPrefs.SetInt(Lib.AudioPrefs, 0);
  198. }
  199. else
  200. {
  201. Audio = true;
  202. ResourceManager.SetActive(ObjectLabel.L_AudioOn, true);
  203. ResourceManager.SetActive(ObjectLabel.L_AudioOff, false);
  204. PlayerPrefs.SetInt(Lib.AudioPrefs, 1);
  205. }
  206. }
  207. public IEnumerator Loop(AudioSource audioSource)
  208. {
  209. while (true)
  210. {
  211. Mark: yield return null;
  212. while (Manager.Background)
  213. {
  214. goto Mark;
  215. }
  216. while (!audioSource.enabled)
  217. {
  218. goto Mark;
  219. }
  220. while (audioSource.isPlaying)
  221. {
  222. goto Mark;
  223. }
  224. while (!Music)
  225. {
  226. goto Mark;
  227. }
  228. yield return new WaitForSeconds(1.5f);
  229. audioSource.Play();
  230. }
  231. }
  232. }