ManaAudio.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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;
  20. public static bool Music;
  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. Audio = true;
  54. Music = true;
  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. MusicMini.Play();
  72. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  73. };
  74. tween.OnBackwardStart += () =>
  75. {
  76. StopCoroutine(CoroTheme);
  77. };
  78. #endregion
  79. #region MusicTheme
  80. tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  81. tween.OnForwardStart += () =>
  82. {
  83. MusicTheme.Play();
  84. CoroTheme = StartCoroutine(Loop(MusicTheme));
  85. };
  86. tween.OnBackwardStart += () =>
  87. {
  88. StopCoroutine(CoroTheme);
  89. };
  90. MusicTheme.TweenForAudio();
  91. #endregion
  92. }
  93. public override void RegistReference()
  94. {
  95. AudioSource[] audioSources = ManaReso.Gets<AudioSource>("Music");
  96. MusicClip = audioSources[2];
  97. MusicMini = audioSources[1];
  98. MusicTheme = audioSources[0];
  99. }
  100. public static void PlayClip(Clip clip)
  101. {
  102. AudioClip audioClip = ClipDic[clip];
  103. MusicClip.PlayOneShot(audioClip);
  104. }
  105. public void MusicSwitch()
  106. {
  107. if (Music)
  108. {
  109. Music = false;
  110. ManaReso.SetActive("L_MusicOn", false);
  111. ManaReso.SetActive("L_MusicOff", true);
  112. MusicMini.enabled = false;
  113. MusicTheme.enabled = false;
  114. StopCoroutine(CoroTheme);
  115. }
  116. else
  117. {
  118. Music = true;
  119. ManaReso.SetActive("L_MusicOn", true);
  120. ManaReso.SetActive("L_MusicOff", false);
  121. MusicMini.enabled = true;
  122. MusicTheme.enabled = true;
  123. MusicTheme.Play();
  124. CoroTheme = StartCoroutine(Loop(MusicTheme));
  125. }
  126. }
  127. public void AudioSwitch()
  128. {
  129. if (Audio)
  130. {
  131. Audio = false;
  132. ManaReso.SetActive("L_AudioOn", false);
  133. ManaReso.SetActive("L_AudioOff", true);
  134. MusicClip.enabled = false;
  135. }
  136. else
  137. {
  138. Audio = true;
  139. ManaReso.SetActive("L_AudioOn", true);
  140. ManaReso.SetActive("L_AudioOff", false);
  141. MusicClip.enabled = true;
  142. }
  143. }
  144. public IEnumerator Loop(AudioSource audioSource)
  145. {
  146. while (true)
  147. {
  148. while (audioSource.enabled == false)
  149. {
  150. yield return null;
  151. }
  152. while (audioSource.isPlaying)
  153. {
  154. yield return null;
  155. }
  156. yield return new WaitForSeconds(1.5f);
  157. audioSource.Play();
  158. }
  159. }
  160. public override void Reactive()
  161. {
  162. if (CoroTheme != null)
  163. {
  164. StopCoroutine(CoroTheme);
  165. CoroTheme = StartCoroutine(Loop(MusicTheme));
  166. }
  167. if (CoroMiniGame != null)
  168. {
  169. StopCoroutine(CoroMiniGame);
  170. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  171. }
  172. }
  173. }