// ========================== [ Division ] ========================== // protected override void OnAwake() { base.OnAwake(); if (_bAutoPoolingOnAwake == false) { return; } List <int> listResourceNameInt = _mapResourceOrigin.Keys.ToList(); List <ENUM_RESOURCE_NAME> listResourceName = listResourceNameInt.ConvertEnumList <ENUM_RESOURCE_NAME>(); for (int i = 0; i < _mapResourceOrigin.Count; i++) { List <SPoolingObject> listPoolingInstance = new List <SPoolingObject>(); ENUM_RESOURCE_NAME eResourceName = listResourceName[i]; int iPoolingCount = OnGetPoolingCount(eResourceName); for (int j = 0; j < iPoolingCount; j++) { RESOURCE pResource = MakeResource(eResourceName); pResource.name += j; SPoolingObject pPoolingObj = new SPoolingObject(pResource); listPoolingInstance.Add(pPoolingObj); _listInstanceAll.Add(pPoolingObj); } _mapPoolingInstance.Add(eResourceName, listPoolingInstance); } OnInitManager(); }
private void ProcReturnResource(SPoolingObject sPoolingObj) { RESOURCE pResource = sPoolingObj.pResource; OnReturnResource(ref pResource); pResource.gameObject.SetActive(false); sPoolingObj.bEnable = false; if (pResource.transform.parent != transform) { pResource.transform.SetParent(transform); } }
/// <summary> /// Enum형태의 리소스 이름의 List에 있는 오브젝트만 풀링을 위해 오브젝트를 새로 생성합니다. /// </summary> /// <param name="listRequestPooling">풀링할 Enum 형태의 리소스 리스트</param> public void DoStartPooling(List <ENUM_RESOURCE_NAME> listRequestPooling) { for (int i = 0; i < listRequestPooling.Count; i++) { List <SPoolingObject> listPoolingInstance = new List <SPoolingObject>(); ENUM_RESOURCE_NAME eResourceName = listRequestPooling[i]; int iPoolingCount = OnGetPoolingCount(eResourceName); for (int j = 0; j < iPoolingCount; j++) { RESOURCE pResource = MakeResource(eResourceName); pResource.name += j; SPoolingObject pPoolingObj = new SPoolingObject(pResource); listPoolingInstance.Add(pPoolingObj); _listInstanceAll.Add(pPoolingObj); } _mapPoolingInstance.Add(eResourceName, listPoolingInstance); } OnInitManager(); }
// ========================== [ Division ] ========================== // /// <summary> /// 현재 사용하지 않는 오브젝트를 얻습니다. 주의) 사용후 반드시 Return 바람 /// </summary> /// <param name="eResourceName">Enum형태의 리소스 이름</param> /// <returns></returns> public RESOURCE DoGetResource_Disable(ENUM_RESOURCE_NAME eResourceName, bool bGameObjectActive = true) { RESOURCE pFindResource = null; if (_mapPoolingInstance.ContainsKey(eResourceName) == false) { _mapPoolingInstance.Add(eResourceName, new List <SPoolingObject>()); } List <SPoolingObject> listPoolingObject = _mapPoolingInstance[eResourceName]; for (int i = 0; i < listPoolingObject.Count; i++) { if (listPoolingObject[i].bEnable == false) { listPoolingObject[i].bEnable = true; pFindResource = listPoolingObject[i].pResource; break; } } if (pFindResource == null) { pFindResource = MakeResource(eResourceName); pFindResource.name += listPoolingObject.Count; SPoolingObject pPoolingObj = new SPoolingObject(pFindResource); pPoolingObj.bEnable = true; listPoolingObject.Add(pPoolingObj); _listInstanceAll.Add(pPoolingObj); } OnGetResource_Disable(eResourceName, ref pFindResource); pFindResource.gameObject.SetActive(bGameObjectActive); return(pFindResource); }