using System; using System.Threading.Tasks; using Cysharp.Threading.Tasks; using Main; using Stary.Evo.AudioCore; using UnityEngine; using UnityEngine.Events; using YooAsset; namespace Stary.Evo { /// /// 热更基类,应该继承的基类 /// public class DomainBase : MonoBehaviour { public string DomainName { protected get; set; } public Transform TransformInfo; protected bool isExit { private get; set; } /// /// 触发Domain时,调用该方法 /// /// public virtual void OnEnter(string param) { TransformInfo = transform.Find("TransformInfo"); } /// /// Domain被关闭时,会调该方法 /// /// public virtual void OnExit() { isExit = true; AudioCoreManager.StopMusic(); } public virtual async Task OnEnterAsync(string param) { isExit = true; } public virtual Task OnExitAsync() { return Task.CompletedTask; } private async void OnDestroy() { await ForceUnloadAllAssets(); } // 强制卸载所有资源包,该方法请在合适的时机调用。 // 注意:Package在销毁的时候也会自动调用该方法。 private async UniTask ForceUnloadAllAssets() { var package = YooAssets.TryGetPackage(DomainName); if (package != null) { var operation = package.UnloadAllAssetsAsync(); await operation; await package.DestroyAsync(); YooAssets.RemovePackage(DomainName); Resources.UnloadUnusedAssets(); GC.Collect(); GC.WaitForPendingFinalizers(); Debug.Log($"UnityEvo:{DomainName} 资源包已卸载..."); } else { Debug.LogWarning($"UnityEvo:{DomainName} 资源包不存在,请检查是否已经卸载还是卸载异常..."); } } } }