using System; using System.Collections; using UnityEngine; using UnityEngine.Internal; namespace Stary.Evo.AudioCore { // 音频协程启动器 public class CoroutineHelper : IDisposable { private static CoroutineHelper _instance = new CoroutineHelper(); public static CoroutineHelper Instance => _instance; private CoroutineRunner _coroutineRunner; private CoroutineHelper() { GameObject runnerObject = new GameObject("CoroutineRunner"); _coroutineRunner= runnerObject.AddComponent(); } public Coroutine StartCoroutine(IEnumerator coroutine) { Coroutine myCoroutine = _coroutineRunner.StartIEnumerator(coroutine); return myCoroutine; } public void StopCoroutine(Coroutine myCoroutine) { _coroutineRunner.StopIEnumerator(myCoroutine); } public void Dispose() { if (_coroutineRunner != null) { GameObject.Destroy(_coroutineRunner.gameObject); _coroutineRunner = null; } if (CoroutineHelper.Instance != null) { CoroutineHelper._instance = null; } } public class CoroutineRunner : MonoBehaviour { public Coroutine StartIEnumerator(IEnumerator coroutine) { Coroutine myCoroutine = StartCoroutine(coroutine); return myCoroutine; } public void StopIEnumerator(Coroutine myCoroutine) { StopCoroutine(myCoroutine); } } } }