Files
plugin-library/Assets/Main/HotfixUpdateScript/Runtime/HotUpdate/Init/Base/DomainBase.cs

83 lines
2.2 KiB
C#
Raw Normal View History

2025-05-23 18:26:47 +08:00
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
{
/// <summary>
/// 热更基类,应该继承的基类
/// </summary>
public class DomainBase : MonoBehaviour
{
public string DomainName { protected get; set; }
public Transform TransformInfo;
protected bool isExit { private get; set; }
/// <summary>
/// 触发Domain时调用该方法
/// </summary>
/// <param name="param"></param>
public virtual void OnEnter(string param)
{
TransformInfo = transform.Find("TransformInfo");
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
}
/// <summary>
/// Domain被关闭时会调该方法
/// </summary>
/// <param name="param"></param>
public virtual void OnExit()
{
isExit = true;
AudioCoreManager.StopMusic();
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
}
public virtual async Task OnEnterAsync(string param)
{
isExit = true;
}
2025-07-02 10:05:26 +08:00
public virtual Task OnExitAsync()
2025-05-23 18:26:47 +08:00
{
2025-07-02 10:05:26 +08:00
return Task.CompletedTask;
2025-05-23 18:26:47 +08:00
}
private async void OnDestroy()
{
2025-07-02 10:05:26 +08:00
await ForceUnloadAllAssets();
2025-05-23 18:26:47 +08:00
}
// 强制卸载所有资源包,该方法请在合适的时机调用。
// 注意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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
}
}
}
}