Exemple #1
0
        /// <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)));
            }
        }