using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.U2D; using YooAsset; public class SpriteAtlasLoader : MonoBehaviour { private Dictionary _loadedAtlas = new Dictionary(1000); private List _loadHandles = new List(1000); public void Awake() { SpriteAtlasManager.atlasRequested += RequestAtlas; } public void OnDestroy() { foreach (var handle in _loadHandles) { handle.Release(); } } private void RequestAtlas(string atlasName, Action callback) { if (_loadedAtlas.TryGetValue(atlasName, out var value)) { callback.Invoke(value); } else { var package = YooAssets.GetPackage("DefaultPackage"); var loadHandle = package.LoadAssetSync(atlasName); if (loadHandle.Status != EOperationStatus.Succeed) { Debug.LogWarning($"Failed to load sprite atlas : {atlasName} ! {loadHandle.LastError}"); return; } var atlas = loadHandle.AssetObject as SpriteAtlas; _loadedAtlas.Add(atlasName, atlas); _loadHandles.Add(loadHandle); callback.Invoke(atlas); } } }