Files
JJBB/Assets/Project/Script/AssetManagement/AsyncLoadBase/AsyncLoadUnit.cs
2024-08-23 15:49:34 +08:00

62 lines
1.8 KiB
C#

using UnityEngine;
using UnityEngine.Events;
namespace AssetManagement
{
public abstract class AsyncLoadUnit
{
protected AssetPathHub pathHub;
public string name { get; private set; }
public int priority { get; set; }
public string error { get; private set; }
public AsyncLoadUnitState state { get; private set; }
public event UnityAction<AsyncLoadUnit> onComplete;
public void Init(AssetPathHub pathHub, string assetName, int priority)
{
name = assetName;
this.priority = priority;
this.pathHub = pathHub;
}
public void Load()
{
if (state != AsyncLoadUnitState.Loading)
{
string startError;
var operation = StartOperation(out startError);
error = startError;
if (string.IsNullOrEmpty(error))
operation.completed += OnOperationComplete;
state = string.IsNullOrEmpty(error) ? AsyncLoadUnitState.Loading : AsyncLoadUnitState.Done;
}
}
public abstract float GetProgress();
/// <summary>
/// 开始当前配置的任务
/// </summary>
protected abstract AsyncOperation StartOperation(out string startError);
/// <summary>
/// 处理完成的任务,并返回错误
/// </summary>
protected abstract string HandleOperation(AsyncOperation operation);
private void OnOperationComplete(AsyncOperation operation)
{
error = HandleOperation(operation);
state = AsyncLoadUnitState.Done;
if (onComplete != null)
onComplete(this);
}
}
public enum AsyncLoadUnitState
{
Idle,
Loading,
Done,
}
}