using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class AddrHandleBase : MonoBehaviour { protected Dictionary m_Handle = new Dictionary(); protected void Load_Obj(string path, Action> loadfinish = null) { ReleaseHandle(path); AddrResourceMgr.Ins.LoadObject(path, handle => { m_Handle[path] = handle; loadfinish?.Invoke(handle); }); } protected void Load_Image(Image image, string path, Action loadfinish = null) { image.enabled = false; ReleaseHandle(path); AddrResourceMgr.Ins.LoadObject(path, handle => { m_Handle[path] = handle; image.enabled = true; image.sprite = handle.Result; loadfinish?.Invoke(); }); } protected void Load_SpriteRenderer(SpriteRenderer image, string path, Action loadfinish = null) { image.enabled = false; ReleaseHandle(path); AddrResourceMgr.Ins.LoadObject(path, handle => { m_Handle[path] = handle; image.enabled = true; image.sprite = handle.Result; loadfinish?.Invoke(); }); } protected void Load_SpriteRenderer(SpriteRenderer[] images, string path, Action loadfinish = null) { for (int i = 0; i < images.Length; i++) images[i].enabled = false; ReleaseHandle(path); AddrResourceMgr.Ins.LoadObject(path, handle => { m_Handle[path] = handle; for (int i = 0; i < images.Length; i++) { images[i].enabled = true; images[i].sprite = handle.Result; } loadfinish?.Invoke(); }); } /// /// 특정 path의 핸들만 해제 /// private void ReleaseHandle(string path) { if (m_Handle.TryGetValue(path, out var handle)) { AddrResourceMgr.Ins.Relese(handle); m_Handle.Remove(path); } } protected virtual void OnDestroy() { foreach (var handle in m_Handle.Values) AddrResourceMgr.Ins.Relese(handle); m_Handle.Clear(); } }