示例#1
0
 public PoolingInfo(PoolingObjectType poolingObjectType, string prefixName)
 {
     IsInited          = true;
     IsPooled          = false;
     PoolingObjectType = poolingObjectType;
     PrefixName        = prefixName;
 }
        /// <summary>
        /// 해당 타입의 풀링된 오브젝트를 리턴.
        /// </summary>
        private PooledObjectComponent ReturnPooledObjectBase(PoolingObjectType pEPoolingObjectType,
                                                             string objectName)
        {
            switch (pEPoolingObjectType)
            {
            case PoolingObjectType.View:
            {
                if (IsExistPooledObject(pEPoolingObjectType, objectName))
                {
                    var obj = _pooledPageViewDict[objectName];
                    _pooledPageViewDict.Remove(objectName);
                    return(obj);
                }

                return(null);
            }

            case PoolingObjectType.Prefab:
            {
                if (IsExistPooledObject(pEPoolingObjectType, objectName))
                {
                    return(_pooledPrefabDict[objectName].Dequeue());
                }

                return(null);
            }

            default:
                return(null);
            }
        }
        /// <summary>
        /// 풀링된 오브젝트를 꺼냄.
        /// 리소스 관리를 껐다 켰다 할 수 있도록 설계해야 함.
        /// </summary>
        public T ReturnLoadResources <T>(PoolingObjectType pEPoolingObjectType,
                                         string objectName, Transform parents = null) where T : PooledObjectComponent
        {
            if (!IsExistPooledObject(pEPoolingObjectType, objectName))
            {
                Debug.LogException(new NullReferenceException("null ref exception pooled object"));
                return(null);
            }

            var pooledObject = ReturnPooledObjectBase(pEPoolingObjectType, objectName);

            // 리소스 오브젝트가 없음.
            if (pooledObject == null)
            {
                Debug.LogException(new NullReferenceException("null ref exception pooled object"));
                return(null);
            }

            // 리소스 오브젝트가 있음.
            if (parents)
            {
                pooledObject.transform.SetParent(parents);
            }
            pooledObject.Unpooled();

            return(pooledObject.GetComponent <T> ());
        }
示例#4
0
 /// <summary>
 /// 오브젝트가 생성됨.
 /// </summary>
 public T Created <T>(PoolingObjectType pEPoolingObjectType, string p_name)
     where T : PooledObjectComponent
 {
     gameObject.SetActive(true);
     PoolingInfo = new PoolingInfo(pEPoolingObjectType, p_name);
     OnCreated();
     return(GetCachedComponent <T>());
 }
示例#5
0
 /// <summary>
 /// 오브젝트가 생성됨.
 /// </summary>
 public T Created <T>(Transform parents, PoolingObjectType pEPoolingObjectType, string p_name)
     where T : PooledObjectComponent
 {
     transform.SetParent(parents);
     gameObject.SetActive(true);
     PoolingInfo = new PoolingInfo(pEPoolingObjectType, p_name);
     OnCreated();
     return(GetCachedComponent <T>());
 }
        /// <summary>
        /// 해당 타입의 해당 문자열을 가진 풀링된 오브젝트가 있는지 여부.
        /// </summary>
        /// <returns></returns>
        public bool IsExistPooledObject(PoolingObjectType pEPoolingObjectType, string p_prefix_name)
        {
            switch (pEPoolingObjectType)
            {
            case PoolingObjectType.View:
            {
                return(_pooledPageViewDict.ContainsKey(p_prefix_name) &&
                       _pooledPageViewDict[p_prefix_name] != null);
            }

            case PoolingObjectType.Prefab:
            {
                return(_pooledPrefabDict.ContainsKey(p_prefix_name) &&
                       _pooledPrefabDict[p_prefix_name].Count != 0);
            }

            default:
                Debug.Log($"Wrong Status_Pooling Value : {default(PoolingObjectType)}");
                return(false);
            }
        }