ManaAudio.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ManaAudio : Regist
  4. {
  5. #region 变量
  6. public static bool Audio;
  7. public static bool Music;
  8. public static Coroutine CoroTheme;
  9. public static Coroutine CoroMiniGame;
  10. public static Transform AudioParent;
  11. public static Transform MusicParent;
  12. public static ManaAudio Instance;
  13. public static AudioSource MusicMini;
  14. public static AudioSource MusicTheme;
  15. #endregion
  16. public override void Instantiate()
  17. {
  18. MusicParent = new GameObject("Music").transform;
  19. MusicParent.parent = Initializer.Instance.transform;
  20. ManaReso.Get<ObjRoot>("MusicMini", Folder.Scene, true, MusicParent, true, ObjType.MusicMini);
  21. ManaReso.Get<ObjRoot>("MusicTheme", Folder.Scene, true, MusicParent, true, ObjType.MusicTheme);
  22. }
  23. public override void RegistValueA()
  24. {
  25. Audio = true;
  26. Music = true;
  27. Instance = this;
  28. #region MusicMini
  29. Transform tra = MusicMini.transform;
  30. TweenAudio tween = tra.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  31. tween.OnForwardStart += () =>
  32. {
  33. MusicMini.Play();
  34. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  35. };
  36. tween.OnBackwardStart += () =>
  37. {
  38. StopCoroutine(CoroTheme);
  39. };
  40. #endregion
  41. #region MusicTheme
  42. tra = MusicTheme.transform;
  43. tween = tra.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  44. tween.OnForwardStart += () =>
  45. {
  46. MusicTheme.Play();
  47. CoroTheme = StartCoroutine(Loop(MusicTheme));
  48. };
  49. tween.OnBackwardStart += () =>
  50. {
  51. StopCoroutine(CoroTheme);
  52. };
  53. #endregion
  54. ManaReso.Get("MusicTheme").TweenForAudio();
  55. }
  56. public override void RegistReference()
  57. {
  58. MusicMini = ManaReso.Get<AudioSource>("MusicMini");
  59. MusicTheme = ManaReso.Get<AudioSource>("MusicTheme");
  60. }
  61. public void MusicSwitch()
  62. {
  63. if (Music)
  64. {
  65. Music = false;
  66. ManaReso.SetActive("L_MusicOn", false);
  67. ManaReso.SetActive("L_MusicOff", true);
  68. MusicParent.SetActive(false);
  69. StopCoroutine(CoroTheme);
  70. }
  71. else
  72. {
  73. Music = true;
  74. ManaReso.SetActive("L_MusicOn", true);
  75. ManaReso.SetActive("L_MusicOff", false);
  76. MusicParent.SetActive(true);
  77. MusicTheme.TweenForAudio();
  78. }
  79. }
  80. public void AudioSwitch()
  81. {
  82. if (Audio)
  83. {
  84. Audio = false;
  85. ManaReso.SetActive("L_AudioOn", false);
  86. ManaReso.SetActive("L_AudioOff", true);
  87. }
  88. else
  89. {
  90. Audio = true;
  91. ManaReso.SetActive("L_AudioOn", true);
  92. ManaReso.SetActive("L_AudioOff", false);
  93. }
  94. }
  95. public IEnumerator Loop(AudioSource audioSource)
  96. {
  97. while (true)
  98. {
  99. while (audioSource.isPlaying)
  100. {
  101. yield return null;
  102. }
  103. yield return new WaitForSeconds(3);
  104. audioSource.Play();
  105. }
  106. }
  107. public override void Reactive()
  108. {
  109. if (CoroTheme != null)
  110. {
  111. StopCoroutine(CoroTheme);
  112. CoroTheme = StartCoroutine(Loop(MusicTheme));
  113. }
  114. if (CoroMiniGame != null)
  115. {
  116. StopCoroutine(CoroMiniGame);
  117. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  118. }
  119. }
  120. }