62 lines
1.8 KiB
C#
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,
|
|
}
|
|
} |