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} 资源包不存在,请检查是否已经卸载还是卸载异常...");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|