// using System using UnityEngine; public class ResourceManager { public T Load(string path) where T : Object { // [PM]_1. 에 해당하는 해결책: if문 if (typeof(T) == typeof(GameObject)) { string name = path; int idx = name.LastIndexOf('/'); if (idx >= 0) name = name.Substring(idx + 1); GameObject go = Managers.Pool.GetOriginal(name); if (go != null) return go as T; } return Resources.Load(path); } public GameObject Instantiate(string path, Transform parent = null) { // [PM]_1. 이 original도 들고 있을 경우에는 로드 없이 사용하면 될 것 같다. GameObject original = Load($"Prefabs/{path}"); if (original == null) { Debug.Log($"Prefab Missing! {path}"); return null; } // [PM]_2. 혹시 풀링된 오브젝트가 있을 경우에는 그걸 사용하면 된다. // [PM]_2. 의 해결책 if (original.GetComponent() != null) return Managers.Pool.Pop(original, parent).gameObject; // 여기는 프리팹을 만들다 보면 뒤에 (Clone) 이라는 이름이 붙는다. // 이걸 제거하는 작업 GameObject go = Object.Instantiate(original, parent); int idx = go.name.IndexOf("(Clone)"); if (idx > 0) go.name = original.name;//go.name.Substring(0, idx); return go; // return Object.Instantiate(prefab, parent); } public void Destroy(GameObject go) { if(go == null) return; // 만약 풀링 필요시 풀링 매니저에게 위탁 Poolable poolable = go.GetComponent(); if (poolable != null) { Managers.Pool.Push(poolable); return; } Object.Destroy(go); } }