/// <summary> /// 키를 언락한다. 중복으로 넣어도 알아서 처리됨 /// </summary> public static void UnlockKey(string key) { if (!UserData.unlocks.Contains(key)) { UserData.unlocks.Add(key); UserData.UpdateData(); KLog.LogWarning(string.Format("[{0}] Unlock Key", key)); } }
/// <summary> /// 풀을 준비함. /// </summary> private void ReadyPool(string path, int count, bool autoCollecting) { // 중복처리 if (this.poolObjectRoot.ContainsKey(path)) { KLog.LogWarning(string.Format("풀링 중복: {0}", path)); return; } // 리소스정보 불러오기 GameObject resource = Resources.Load <GameObject>(path); if (resource == null) { KLog.LogError("리소스 정보를 찾지 못함. " + path); return; } // 리소스 정보 캐싱 this.objectResource.Add(path, resource); // 생성된 오브젝트들을 담을 빈 부모 오브젝트 생성 GameObject rootObj = new GameObject(path); rootObj.transform.SetParent(this.transform); this.poolObjectRoot.Add(path, rootObj); // 컨테이너에 등록 // 오브젝트를 count에 맞춰 생성 for (int i = 0; i < count; i++) { GameObject newObj = Instantiate(resource); PoolingObject po = newObj.AddComponent <PoolingObject>(); po.path = path; po.autoCollection = autoCollecting; newObj.transform.SetParent(rootObj.transform); newObj.gameObject.SetActive(false); } //KLog.Log(string.Format("Pooling Resource. Path: {0}, Count: {1}", path, count)); }
/// <summary> /// 오브젝트를 가져옴. /// 풀링된 오브젝트: 풀링된 오브젝트중 하나를 줌. 없으면 추가생성 /// 풀링안된 오브젝트: 매번 Resources.Load를 통해 가져옴 /// </summary> public T Get <T>(string path) where T : Component { if (this.poolObjectRoot.ContainsKey(path)) { // 풀링이 되어 있는 오브젝트 GameObject parentObj = this.poolObjectRoot[path]; if (parentObj.transform.childCount > 0) // 풀링이 된 오브젝트가 남아있다. { Transform ret = parentObj.transform.GetChild(0); ret.transform.SetParent(null); ret.gameObject.SetActive(true); return(ret.GetComponent <T>()); } else // 풀링된 오브젝트가 없다. { // 새로 생성 GameObject newObj = Instantiate(this.objectResource[path]); PoolingObject po = newObj.AddComponent <PoolingObject>(); po.path = path; po.autoCollection = false; KLog.LogWarning("Inc Object. " + path); return(newObj.GetComponent <T>()); } } else { // 풀링이 안된 오브젝트는 바로 생성함 KLog.LogWarning("Resource.Load Object. " + path); return(Instantiate(Resources.Load <T>(path))); } }