72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
|
|
namespace AibisDream.Framework
|
|
{
|
|
/// <summary>
|
|
/// 旧版资源加载工具类。新代码请使用 ResourceSystem / SceneResourceLoader。
|
|
/// 保留供过渡期使用,后续迁移完成后将移除。
|
|
/// </summary>
|
|
public static class ResourceKit
|
|
{
|
|
public static T LoadAssetSync<T>(string key) where T : UnityEngine.Object
|
|
{
|
|
var operation = Addressables.LoadAssetAsync<T>(key);
|
|
|
|
operation.WaitForCompletion();
|
|
|
|
if (operation.Status == AsyncOperationStatus.Succeeded)
|
|
{
|
|
return operation.Result;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log($"资源{key}不存在");
|
|
return default;
|
|
}
|
|
}
|
|
|
|
public static void LoadAssetAsync<T>(string key, Action<T> callback) where T : UnityEngine.Object
|
|
{
|
|
Addressables.LoadAssetAsync<T>(key).Completed += operation =>
|
|
{
|
|
if (operation.Status == AsyncOperationStatus.Succeeded)
|
|
{
|
|
callback(operation.Result);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log($"资源{key}不存在");
|
|
}
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 异步加载 Addressable 资源,callback 接收完整 handle。调用方需在适当时机调用 Release 释放。
|
|
/// </summary>
|
|
public static void LoadAssetAsyncWithHandle<T>(string key, Action<AsyncOperationHandle<T>> callback) where T : UnityEngine.Object
|
|
{
|
|
var handle = Addressables.LoadAssetAsync<T>(key);
|
|
handle.Completed += operation =>
|
|
{
|
|
if (operation.Status != AsyncOperationStatus.Succeeded)
|
|
{
|
|
Debug.Log($"资源{key}不存在");
|
|
}
|
|
callback(operation);
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 释放 Addressable 加载的 handle
|
|
/// </summary>
|
|
public static void Release<T>(AsyncOperationHandle<T> handle)
|
|
{
|
|
if (handle.IsValid())
|
|
Addressables.Release(handle);
|
|
}
|
|
}
|
|
}
|