Files
plugin-library/Assets/Main/HotfixUpdateScript/Runtime/HotUpdate/Init/Base/DomainBase.cs
2025-07-02 10:05:26 +08:00

83 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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");
}
/// <summary>
/// Domain被关闭时会调该方法
/// </summary>
/// <param name="param"></param>
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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
}
}
}
}