ManaAudio.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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. if (!Music)
  103. {
  104. ManaReso.SetActive("L_MusicOn", false);
  105. ManaReso.SetActive("L_MusicOff", true);
  106. }
  107. if (!Audio)
  108. {
  109. ManaReso.SetActive("L_AudioOn", false);
  110. ManaReso.SetActive("L_AudioOff", true);
  111. }
  112. }
  113. public override void RegistReference()
  114. {
  115. AudioSource[] audioSources = ManaReso.Gets<AudioSource>("Music");
  116. MusicClip = audioSources[2];
  117. MusicMini = audioSources[1];
  118. MusicTheme = audioSources[0];
  119. }
  120. public static void PlayClip(Clip clip)
  121. {
  122. if (Audio)
  123. {
  124. AudioClip audioClip = ClipDic[clip];
  125. MusicClip.PlayOneShot(audioClip);
  126. }
  127. }
  128. public static void InitAudioSettingFromPlayerPrefs()
  129. {
  130. Audio = PlayerPrefs.GetInt("AudioOn", 1).ToBool();
  131. Music = PlayerPrefs.GetInt("MusicOn", 1).ToBool();
  132. }
  133. public static void SetLogoVolume()
  134. {
  135. if (!Audio || !Music)
  136. {
  137. GameObject.Find("LOGO0005").GetComponent<AudioSource>().volume = 0;
  138. }
  139. }
  140. public void MusicSwitch()
  141. {
  142. if (Music)
  143. {
  144. Music = false;
  145. ManaReso.SetActive("L_MusicOn", false);
  146. ManaReso.SetActive("L_MusicOff", true);
  147. MusicMini.Pause();
  148. MusicTheme.Pause();
  149. PlayerPrefs.SetInt("MusicOn", 0);
  150. }
  151. else
  152. {
  153. Music = true;
  154. ManaReso.SetActive("L_MusicOn", true);
  155. ManaReso.SetActive("L_MusicOff", false);
  156. MusicMini.UnPause();
  157. MusicTheme.UnPause();
  158. PlayerPrefs.SetInt("MusicOn", 1);
  159. }
  160. }
  161. public void AudioSwitch()
  162. {
  163. if (Audio)
  164. {
  165. Audio = false;
  166. ManaReso.SetActive("L_AudioOn", false);
  167. ManaReso.SetActive("L_AudioOff", true);
  168. PlayerPrefs.SetInt("AudioOn", 0);
  169. }
  170. else
  171. {
  172. Audio = true;
  173. ManaReso.SetActive("L_AudioOn", true);
  174. ManaReso.SetActive("L_AudioOff", false);
  175. PlayerPrefs.SetInt("AudioOn", 1);
  176. }
  177. }
  178. public IEnumerator Loop(AudioSource audioSource)
  179. {
  180. while (true)
  181. {
  182. Mark: yield return null;
  183. while (ManaCenter.Background)
  184. {
  185. goto Mark;
  186. }
  187. while (!audioSource.enabled)
  188. {
  189. goto Mark;
  190. }
  191. while (audioSource.isPlaying)
  192. {
  193. goto Mark;
  194. }
  195. while (!Music)
  196. {
  197. goto Mark;
  198. }
  199. yield return new WaitForSeconds(1.5f);
  200. audioSource.Play();
  201. }
  202. }
  203. }
  204. #region DebugList
  205. //从花园到小游戏
  206. //从小游戏到花园
  207. //从后台恢复
  208. //循环
  209. //静音
  210. #endregion