using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// UI帧动画管理器 - 负责帧动画资源的加载和管理 /// public class UIFrameMgr { private static UIFrameMgr _inst = null; private static readonly object _lock = new object(); public static UIFrameMgr Inst { get { if (_inst == null) { lock (_lock) { if (_inst == null) { _inst = new UIFrameMgr(); } } } return _inst; } } // 帧动画资源缓存 private Dictionary> allFrameDic = new Dictionary>(); // 是否已初始化 private bool isInitialized = false; public UIFrameMgr() { Init(); } /// /// 初始化管理器 /// public void Init() { if (isInitialized) return; allFrameDic.Clear(); isInitialized = true; } /// /// 加载指定帧动画资源 /// private void LoadFrameSprites(FrameAnimationConfig cfg) { if (allFrameDic.ContainsKey(cfg.name)) return; List spriteList = new List(); for (int i = 1; i <= cfg.frameCnt; i++) { string spritePath = "Sprite/" + cfg.folder; string spriteName = StringUtility.Contact(cfg.name, "_", i); Sprite sprite = ResManager.Instance.LoadAsset(spritePath, spriteName); if (sprite != null) { spriteList.Add(sprite); } } if (spriteList.Count > 0) { allFrameDic.Add(cfg.name, spriteList); } } /// /// 获取帧动画资源 /// public List GetDynamicImage(string key) { // 按需加载资源 if (!allFrameDic.ContainsKey(key)) { LoadFrameSprites(FrameAnimationConfig.Get(key)); } if (allFrameDic.TryGetValue(key, out var list)) { return list; } return null; } /// /// 检查是否包含指定帧动画 /// public bool ContainsDynamicImage(string key) { return FrameAnimationConfig.HasKey(key); } /// /// 预加载指定帧动画 /// public void PreloadDynamicImage(string key) { if (!allFrameDic.ContainsKey(key)) { LoadFrameSprites(FrameAnimationConfig.Get(key)); } } }