public class ObjectPoolingManager : MonoBehaviour
{
ย ย public static ObjectPoolingManager instance;
ย ย public GameObject m_goPrefab =null;
ย ย public Queue m_queue = new Queue();
ย ย public int numOfobject;
ย ย Vector3 position;
ย ย void Awake()
ย ย {
ย ย ย ย instance = this;
ย ย ย ย for (int i = 0; i
ย ย ย ย {
ย ย ย ย ย ย GameObject t_object = Instantiate(m_goPrefab, Vector3.zero, Quaternion.identity);
ย ย ย ย ย ย t_object.GetComponent().position = Vector3.zero;
ย ย ย ย ย ย t_object.SetActive(false);
ย ย ย ย ย ย m_queue.Enqueue(t_object);
ย ย ย ย }
ย ย }
ย ย public void InsertQueue(GameObject p_object)
ย ย {
ย ย ย ย m_queue.Enqueue(p_object);
ย ย ย ย p_object.SetActive(false);
ย ย }
ย ย public GameObject GetQueue(Vector3 position)
ย ย {
ย ย ย ย GameObject t_object = m_queue.Dequeue();
ย ย ย ย t_object.GetComponent().position = position;
ย ย ย ย t_object.SetActive(true);
ย ย ย ย return t_object;
ย ย }
}
----------------------์ฌ๊ธฐ๊น์ง๊ฐ ์ค๋ธ์ ํธ ํ๋ง ์ฝ๋์ ๋๋ค. ์ ํ๋ธ์์ ๊ฐ์ข๋ณด๊ณ ๊ทธ๋๋ก ์ผ์ด์
public class Drop: MonoBehaviour
{
ย ย Rigidbody2D rigid;
ย ย void Awake() {
ย ย ย ย rigid = GetComponent();
ย ย }
ย ย void InsertDrop()
ย ย {
ย ย ย ย ObjectPoolingManager.instance.InsertQueue(gameObject);
ย ย }
ย ย void OnEnable() {
ย ย ย ย //gameObject.GetComponent().velocity = Vector3.zero;
ย ย ย ย rigid.AddForce(Vector3.down*3);
ย ย ย ย Invoke("InsertDrop", 4f);
ย ย }
ย ย ย
}
---------------- ์ด๊ฑด ์ ๊ฐ ์์ฑํ ๋ฌผ๋ฐฉ์ธ ์ฝ๋์ ๋๋ค(rigidbody2d, circlecollider๋ฅผ ๊ฐ์ง ์ค๋ธ์ ํธํ๋ฆฌํน์ ๋๋ค)
public class Generator : MonoBehaviour
{
ย ย public Vector3 position;
ย ย GameObject t_object;
ย ย Vector3 P;
ย ย ย
ย ย void Start()
ย ย {
ย ย ย ย P =transform.position;
ย ย ย ย createWater();
ย ย }
ย ย ย
ย ย void createWater()
ย ย {
ย ย ย ย t_object = ObjectPoolingManager.instance.GetQueue(P);
ย ย ย ย Invoke("createWater", 0.035f);
ย ย }
}
--------------------์ด๊ฑด generator ์ฝ๋์ ๋๋ค.
generator๊ฐ 5๊ฐ์ ๋ ๋์ด๊ฐ๋ฉด ๋ ์ด ์ฌํด์ง๋ค์ ์ ์ฝ๋๊ฐ ๋ฌธ์ ๊ฐ ์๋๊ฑธ๊น์??
1. ํ ์ด๊ธฐํํ๋ ๋ถ๋ถ์ด ์๋ ค์ ์ค๋ธ์ ํธ ๋ช๊ฐ๋ฅผ ์์ฑํด ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ generator๋ฅผ 5๊ฐ ๋ง๋ค์์ ๋ ๋จ์ํ ์ฐ์ ์ ์ผ๋ก ๊ณ์ฐํด๋ณด๋ฉด 570๊ฐ ๋ฏธ๋ง์ด๋ฉด ํ ์ฑ์ฐ๋ ์๋๊ฐ ๋นผ๋ ์๋๋ฅผ ๋ชป๋ฐ๋ผ๊ฐ์ GetQueue์์ null exception์ด ํฐ์ง๊ฑฐ๋ผ๊ณ ์๊ฐํจ. ๊ทธ๊ฒ ๋ณ๋ชฉ์ ์์ธ์ผ ์๋ ์์.
2. ๊ทธ ์ธ์ ์๊ฐ๋๋ ๊ฐ์ค์ 0.035์ด์ ๋ ๋ฒ์ฉ GetComponent๊ฐ ํธ์ถ๋๋ ๊ฒ์ด ์์ธ๋ก ์ฝ์คํธ๊ฐ ์ปค์ ๋ณ๋ชฉ์ ๋ฐ์์ํค๋ ๊ฑธ ์๋ ์์.
์ ์ฃผ์์ด๊ตฌ๋ 0.035์ด์ ํ ๋ฒ์ฉ GetComponent๊ฐ ํธ์ถ๋๋ค
1์ ํด๊ฒฐ๋ฒ์ ์ด๊ธฐํ ํ ๋ ์์ฑํ ์ค๋ธ์ ํธ ์๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๊ณ , 2์ ํด๊ฒฐ๋ฒ์ GetQueue์์ GetComponent ํธ์ถํ๋ ๋ถ๋ถ์ ์์ ๊ธฐ ์ํด ํ์ ๋ด์๋์ ๊ฐ์ฒด์ ํ์ ์ GameObject๋ก ํ์ง๋ง๊ณ Drop์ผ๋ก ํด๋์ผ๋ฉด ๋ ๊ฑฐ ๊ฐ์
๋ต๋ณ๊ฐ์ฌํฉ๋๋ค! ๊ฐ์ฒด์ ํ์ ์ ์ ๊ฐ ๋ง๋ ํด๋์ค๋ก๋ ํ ์์๋๋ณด๊ตฐ์.. ํ๋ ๋ฐฐ์๊ฐ๋๋ค ์ด๋ ๊ฒ๋ ํด๋ณผ๊ฒ์
๋ ผ๋ฆฌ์ ์ผ๋ก๋ ๋ถํ๊ฐ ๊ฑธ๋ฆด๋งํ ๋ถ๋ถ์ ์๋๋ฐ, ๋์ rigidbody ๋ฌผ๋ฆฌ ์ฐ์ฐ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์์ ธ์ ๊ณ์ฐ์ด ๋ฌด๊ฑฐ์์ง๋ ๊ฒ ๊ฐ์. ํ๋ฒ ๋นผ๊ณ ํด๋ณผ๋?
๋จ์ ๊ณ์ฐ์ผ๋ก 4์ด๊ฐ ์ ์ง๋๋ ๋ฌผ๋ฐฉ์ธ์ 0.035์ด๋ง๋ค ์์ฑํ๋ ์ ๋๋ ์ดํฐ๊ฐ 5๊ฐ ์์ผ๋ฉด ํ๋ ์๋น ์ฝ 570๋ฒ์ ๋ฌผ๋ฆฌ ์ฐ์ฐ์ ํด์ผ ํ๋๋ฐ, ์ ์ฌ์์ผ ๊ฒฝ์ฐ ๋ฌด๋ฆฌ๊ฐ ์์ ์๋ ์์ด. ๋ฌผ๋ฆฌ ๋ถ๋ถ์ ๋นผ๊ณ ํ๋ฒ ํด๋ณผ๋?
๊ธ๊ณ ์๋์ฒ๋ผ ํ์ ๊ฒ์์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉด ์ฑ์์ฃผ๋ ์์คํ ๋ ํ์ํด. ์ง๊ธ ์๋ฌ๊ฐ ์๋ด์ผ๋ฉด ๋น์ฅ ๋ฌธ์ ๋ ์์ง๋ง ์์ฑ ์๋๊ฐ ๋นจ๋ผ์ง๊ฑฐ๋ ํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด.
ํ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค ๋นผ๊ณ ํ๋๊น ํจ์ฌ ๊ฐ๋ฒผ์์ง๋ค์ setactive๊ฐ ๋๋ฌด ๋ง์๊ฒ์ด ๋ถํ์ ์์ธ์ธ๊ฐํ๋๋ฐ ๋ฌผ๋ฆฌ์ฐ์ฐ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์๊ฒ์ด ๋ฌธ์ ์๋๋ณด๊ตฐ์ ใ ใ ;
๋ง๊ธ์ถ