111
All checks were successful
Plugin Library CI / publish (00.BuildOriginality) (push) Successful in 5s
Plugin Library CI / publish (00.StaryEvo) (push) Successful in 7s
Plugin Library CI / publish (00.StaryEvoTools) (push) Successful in 22s
Plugin Library CI / publish (01.HybridCLR) (push) Successful in 7s
Plugin Library CI / publish (02.InformationSave) (push) Successful in 3s
Plugin Library CI / publish (03.YooAsset) (push) Successful in 35s
Plugin Library CI / publish (04.AudioCore) (push) Successful in 3s
Plugin Library CI / publish (05.TableTextConversion) (push) Successful in 4s
Plugin Library CI / publish (06.UIFarme) (push) Successful in 18s
Plugin Library CI / publish (07.RKTools) (push) Successful in 3s
Plugin Library CI / publish (11.PointCloudTools) (push) Successful in 4s
Plugin Library CI / publish (12.WeixinMinigame) (push) Successful in 1m5s
Plugin Library CI / publish (08.UniTask) (push) Successful in 4s
Plugin Library CI / publish (09.CodeChecker) (push) Successful in 19s
Plugin Library CI / publish (10.StoryEditor) (push) Successful in 5s
Plugin Library CI / publish (10.XNode) (push) Successful in 3s

This commit is contained in:
2026-05-15 13:43:34 +08:00
parent 97d4ff0450
commit 383c334675
25 changed files with 253 additions and 60 deletions

View File

@@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using YooAsset;
namespace Stary.Evo.UIFarme
{
/// <summary>
/// 基于YooAsset的资源加载实现
/// </summary>
public class YooAssetLoader : IAssetLoader
{
private readonly Dictionary<string, AssetHandle> _handleCache = new Dictionary<string, AssetHandle>();
/// <summary>
/// 通过YooAsset异步加载GameObject资源
/// </summary>
public async Task<GameObject> LoadGameObjectAsync(string assetPath, string packageName = null)
{
AssetHandle handle;
if (string.IsNullOrEmpty(packageName))
{
handle = YooAssets.LoadAssetAsync<GameObject>("Prefabs_"+assetPath);
}
else
{
var package = YooAssets.TryGetPackage(packageName);
if (package == null)
{
handle = YooAssets.LoadAssetAsync<GameObject>("Prefabs_"+assetPath);
}
else
{
handle = package.LoadAssetAsync<GameObject>("Prefabs_"+assetPath);
}
}
await handle.Task;
// 缓存handle用于后续释放
_handleCache[assetPath] = handle;
return handle.AssetObject as GameObject;
}
/// <summary>
/// 释放YooAsset资源句柄
/// </summary>
public void UnloadAsset(string assetPath)
{
if (_handleCache.TryGetValue(assetPath, out AssetHandle handle))
{
handle.Release();
_handleCache.Remove(assetPath);
}
}
}
}