mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
yoo2.2,9
yoo2.2,9
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace YooAsset
|
||||
{
|
||||
public sealed class UnloadAllAssetsOperation : AsyncOperationBase
|
||||
{
|
||||
private enum ESteps
|
||||
{
|
||||
None,
|
||||
AbortDownload,
|
||||
CheckLoading,
|
||||
UnloadAll,
|
||||
Done,
|
||||
}
|
||||
|
||||
private readonly ResourceManager _resManager;
|
||||
private ESteps _steps = ESteps.None;
|
||||
|
||||
internal UnloadAllAssetsOperation(ResourceManager resourceManager)
|
||||
{
|
||||
_resManager = resourceManager;
|
||||
}
|
||||
internal override void InternalOnStart()
|
||||
{
|
||||
_steps = ESteps.AbortDownload;
|
||||
}
|
||||
internal override void InternalOnUpdate()
|
||||
{
|
||||
if (_steps == ESteps.None || _steps == ESteps.Done)
|
||||
return;
|
||||
|
||||
if (_steps == ESteps.AbortDownload)
|
||||
{
|
||||
// 注意:终止所有下载任务
|
||||
var loaderDic = _resManager._loaderDic;
|
||||
foreach (var loader in loaderDic.Values)
|
||||
{
|
||||
loader.AbortDownloadOperation();
|
||||
}
|
||||
_steps = ESteps.CheckLoading;
|
||||
}
|
||||
|
||||
if (_steps == ESteps.CheckLoading)
|
||||
{
|
||||
// 注意:等待所有任务完成
|
||||
var providerDic = _resManager._providerDic;
|
||||
foreach (var provider in providerDic.Values)
|
||||
{
|
||||
if (provider.IsDone == false)
|
||||
return;
|
||||
}
|
||||
_steps = ESteps.UnloadAll;
|
||||
}
|
||||
|
||||
if (_steps == ESteps.UnloadAll)
|
||||
{
|
||||
var loaderDic = _resManager._loaderDic;
|
||||
var providerDic = _resManager._providerDic;
|
||||
|
||||
// 清空所有场景句柄
|
||||
_resManager._sceneHandles.Clear();
|
||||
|
||||
// 释放所有资源句柄
|
||||
foreach (var provider in providerDic.Values)
|
||||
{
|
||||
provider.ReleaseAllHandles();
|
||||
}
|
||||
|
||||
// 强制销毁资源提供者
|
||||
foreach (var provider in providerDic.Values)
|
||||
{
|
||||
provider.DestroyProvider();
|
||||
}
|
||||
|
||||
// 强制销毁文件加载器
|
||||
foreach (var loader in loaderDic.Values)
|
||||
{
|
||||
loader.DestroyLoader();
|
||||
}
|
||||
|
||||
// 清空数据
|
||||
providerDic.Clear();
|
||||
loaderDic.Clear();
|
||||
|
||||
// 注意:调用底层接口释放所有资源
|
||||
Resources.UnloadUnusedAssets();
|
||||
|
||||
_steps = ESteps.Done;
|
||||
Status = EOperationStatus.Succeed;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user