using System.Collections.Generic;
using UnityEngine;
public class ObjectPool<T> :MonoBehaviour{
protected Stack<T> ObjectStack=new Stack<T>();
public GameObject Prefap;
private void Start() {
for(int i=0;i<transform.childCount;i++){
ObjectStack.Push(transform.GetChild(i).GetComponent<T>());
}
}
public virtual T GetObj(){
if(ObjectStack.Count>0){
return ObjectStack.Pop();
}
else{
var copy=Instantiate(Prefap);
copy.transform.SetParent(transform);
copy.transform.localScale=Vector3.one;
return copy.GetComponent<T>();
}
}
public virtual void ReturnObj(T obj){
if(!ObjectStack.Contains(obj))ObjectStack.Push(obj);
}
}
์ธ๊ฑฐ๋ฉด ์ ๊ฑฐ ๋ฃ๊ณ
public class ButtonPool: ObjectPool<Button>
์ด๋ฐ์์ผ๋ก ์์๋ฐ์ ํด๋์ค ๋ง๋ค์ด์ค ๋ค์
์์๋ฐ์ ํด๋์ค๋ฅผ ์๋ฌด ์ค๋ธ์ ํธ์ ๋ฃ์ด๋๊ณ ย
ํด๋งํ ์ค๋ธ์ ํธ๋ฅผ ํ๋ฆฌํน์ผ๋ก ๋ง๋ ๋ค์ ์คํฌ๋ฆฝํธ์ ํ ๋น๋ง ํด์ฃผ๋ฉด ๋๋จ
์์์๋ Button์ผ๋ก ํ์ผ๋๊น ์ ๊ฒฝ์ฐ๋ Button์ด ํฌํจ๋ ์ค๋ธ์ ํธ๋ฅผ ํ๋ฆฌํน์ผ๋ก ํด์ค์ผํจ
GetObj(); ๋ก ์ค๋ธ์ ํธ ๊ตฌํด์ค๊ณ
์ค๋ธ์ ํธ ๋ค ์ฐ๋ฉด
transform.parent.GetComponent<ButtonPool>().ReturnObj(this);
์ด๋ฐ์์ผ๋ก ๋ฐํํด์ฃผ๋ฉด ๋จ
๋๊ธ 0