ManaAudio.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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 ManaAudio : 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 ManaAudio Instance;
  24. public static AudioClip BtnClip;
  25. public static AudioClip SkillClip;
  26. public static AudioClip ErrorClip;
  27. public static AudioClip DropClip;
  28. public static AudioClip CloseClip;
  29. public static AudioClip FlowerClip;
  30. public static AudioClip BubbleClip;
  31. public static AudioClip CurrentClip;
  32. public static AudioClip MiniEndClip;
  33. public static AudioSource MusicClip;
  34. public static AudioSource MusicMini;
  35. public static AudioSource MusicTheme;
  36. public static Dictionary<Clip, AudioClip> ClipDic = new Dictionary<Clip, AudioClip>();
  37. #endregion
  38. public override void Instantiate()
  39. {
  40. BtnClip = ManaReso.Load<AudioClip>("BtnClip", Folder.Audio);
  41. SkillClip = ManaReso.Load<AudioClip>("SkillClip", Folder.Audio);
  42. ErrorClip = ManaReso.Load<AudioClip>("ErrorClip", Folder.Audio);
  43. DropClip = ManaReso.Load<AudioClip>("DropClip", Folder.Audio);
  44. CloseClip = ManaReso.Load<AudioClip>("CloseClip", Folder.Audio);
  45. FlowerClip = ManaReso.Load<AudioClip>("FlowerClip", Folder.Audio);
  46. BubbleClip = ManaReso.Load<AudioClip>("BubbleClip", Folder.Audio);
  47. CurrentClip = ManaReso.Load<AudioClip>("CurrentClip", Folder.Audio);
  48. MiniEndClip = ManaReso.Load<AudioClip>("MiniEndClip", Folder.Audio);
  49. ManaReso.Get("Music", Folder.Audio, true, transform, true, ObjType.Music);
  50. }
  51. public override void RegistValueA()
  52. {
  53. Instance = this;
  54. #region ClipDic
  55. ClipDic.Add(Clip.BtnClip, BtnClip);
  56. ClipDic.Add(Clip.SkillClip, SkillClip);
  57. ClipDic.Add(Clip.ErrorClip, ErrorClip);
  58. ClipDic.Add(Clip.DropClip, DropClip);
  59. ClipDic.Add(Clip.CloseClip, CloseClip);
  60. ClipDic.Add(Clip.FlowerClip, FlowerClip);
  61. ClipDic.Add(Clip.BubbleClip, BubbleClip);
  62. ClipDic.Add(Clip.CurrentClip, CurrentClip);
  63. ClipDic.Add(Clip.MiniEndClip, MiniEndClip);
  64. #endregion
  65. #region MusicMini
  66. TweenAudio tween = MusicMini.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  67. tween.OnForwardStart += () =>
  68. {
  69. if (Music)
  70. {
  71. MusicMini.Play();
  72. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  73. }
  74. };
  75. tween.OnBackwardStart += () =>
  76. {
  77. if (Music)
  78. {
  79. StopCoroutine(CoroTheme);
  80. }
  81. };
  82. #endregion
  83. #region MusicTheme
  84. tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  85. tween.OnForwardStart += () =>
  86. {
  87. if (Music)
  88. {
  89. MusicTheme.Play();
  90. CoroTheme = StartCoroutine(Loop(MusicTheme));
  91. }
  92. };
  93. tween.OnBackwardStart += () =>
  94. {
  95. if (Music)
  96. {
  97. StopCoroutine(CoroTheme);
  98. }
  99. };
  100. #endregion
  101. MusicTheme.TweenForAudio();
  102. }
  103. public override void RegistReference()
  104. {
  105. AudioSource[] audioSources = ManaReso.Gets<AudioSource>("Music");
  106. MusicClip = audioSources[2];
  107. MusicMini = audioSources[1];
  108. MusicTheme = audioSources[0];
  109. }
  110. public static void PlayClip(Clip clip)
  111. {
  112. if (Audio)
  113. {
  114. AudioClip audioClip = ClipDic[clip];
  115. MusicClip.PlayOneShot(audioClip);
  116. }
  117. }
  118. public void MusicSwitch()
  119. {
  120. if (Music)
  121. {
  122. Music = false;
  123. ManaReso.SetActive("L_MusicOn", false);
  124. ManaReso.SetActive("L_MusicOff", true);
  125. MusicMini.Pause();
  126. MusicTheme.Pause();
  127. }
  128. else
  129. {
  130. Music = true;
  131. ManaReso.SetActive("L_MusicOn", true);
  132. ManaReso.SetActive("L_MusicOff", false);
  133. MusicMini.UnPause();
  134. MusicTheme.UnPause();
  135. }
  136. }
  137. public void AudioSwitch()
  138. {
  139. if (Audio)
  140. {
  141. Audio = false;
  142. ManaReso.SetActive("L_AudioOn", false);
  143. ManaReso.SetActive("L_AudioOff", true);
  144. }
  145. else
  146. {
  147. Audio = true;
  148. ManaReso.SetActive("L_AudioOn", true);
  149. ManaReso.SetActive("L_AudioOff", false);
  150. }
  151. }
  152. public IEnumerator Loop(AudioSource audioSource)
  153. {
  154. while (true)
  155. {
  156. Mark: yield return null;
  157. while (ManaCenter.Background)
  158. {
  159. goto Mark;
  160. }
  161. while (!audioSource.enabled)
  162. {
  163. goto Mark;
  164. }
  165. while (audioSource.isPlaying)
  166. {
  167. goto Mark;
  168. }
  169. while (!Music)
  170. {
  171. goto Mark;
  172. }
  173. yield return new WaitForSeconds(1.5f);
  174. audioSource.Play();
  175. }
  176. }
  177. }
  178. #region DebugList
  179. //从花园到小游戏
  180. //从小游戏到花园
  181. //从后台恢复
  182. //循环
  183. //静音
  184. #endregion