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> ()); }
/// <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>()); }
/// <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); } }