using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public abstract class MSObjectPooling<T> : MonoBehaviour where T : Component
{
ย ย public GameObject pooledObject;
ย ย public int pooledAmount = 5;
ย ย public bool willGrow = true;
ย ย List<T> pooledObjects = new List<T>();
// Use this for initialization
void Awake ()ย
ย ย {
ย ย ย ย //pooledObjects = new List<T>();
ย ย ย ย for (int i = 0; i < pooledAmount; i++)
ย ย ย ย {
ย ย ย ย ย ย GameObject obj = AddChild(gameObject, pooledObject);//(GameObject)Instantiate(pooledObject);
ย ย ย ย ย ย obj.SetActive(false);
ย ย ย ย ย ย pooledObjects.Add(obj.GetComponent<T>());
ย ย ย ย }
}
ย ย public T GetPooledObject()
ย ย {
ย ย ย ย for (int i = 0; i < pooledObjects.Count; i++)
ย ย ย ย {
ย ย ย ย ย ย if (!pooledObjects[i].gameObject.activeInHierarchy)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย return pooledObjects[i] as T;
ย ย ย ย ย ย }
ย ย ย ย }
ย ย ย ย if (willGrow)
ย ย ย ย {
ย ย ย ย ย ย GameObject obj = AddChild(gameObject, pooledObject);
ย ย ย ย ย ย var newT = obj.GetComponent<T>();
ย ย ย ย ย ย pooledObjects.Add(newT);
ย ย ย ย ย ย return newT;
ย ย ย ย }
ย ย ย ย return null;
ย ย }
ย ย GameObject AddChild(GameObject parent, GameObject prefab)
ย ย {
ย ย ย ย GameObject go = GameObject.Instantiate(prefab) as GameObject;
#if UNITY_EDITOR
ย ย ย ย UnityEditor.Undo.RegisterCreatedObjectUndo(go, "Create Object");
#endif
ย ย ย ย if (go != null && parent != null)
ย ย ย ย {
ย ย ย ย ย ย Transform t = go.transform;
ย ย ย ย ย ย t.parent = parent.transform;
ย ย ย ย ย ย t.localPosition = Vector3.zero;
ย ย ย ย ย ย t.localRotation = Quaternion.identity;
ย ย ย ย ย ย t.localScale = Vector3.one;
ย ย ย ย ย ย go.layer = parent.layer;
ย ย ย ย }
ย ย ย ย return go;
ย ย }
}
๊ทธ๋ฅ ์์ ๋ฐ์์ ์ฐ๋ฉด๋จ..
using UnityEngine;
using System.Collections;
public class MSEffectPooling : MSObjectPooling<Transform>
{
}
์ง๊ธ ๋ ผ๋์ ์์ ์ ์ค๋ธ์ ํธ ํ๋ง ์์ฒด๊ฐ ์๋๋ผ ๊ทธ T๋ฅผ ์์๋ฐ์ ํด๋์ค๋ค์ ์ค๋ธ์ ํธ๋ค์ ๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๋ ์ ๋ค์ด ๋ํ๋๊ฒ
๋ฐ์ ๊ธ ์ผ์ฌ๋์ธ๋ฐ ์ค๋ธ์ ํธ ํ๋ง์ ์ค๋ธ์ ํธ ์์ฑ๊ณผ ์ญ์ ๊ฐ ๋ง์๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ์ํ๋๊น ์ฌ์ฌ์ฉ์ ๋ชฉ์ ์ผ๋ก ๋๊ฑฐ ์๋๊ฐ์ฌ ์ด๋ฌ๋ฉด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํจ?
gc๊ฐ ์ค๋ธ์ ํธ ์ญ์ ์ ์ผ์ด๋๋๊ฑฐ ์๋๊ฐ์..?
๋๊ธ ์ง์ ๋ค..
์ด ํ๋ง ์๋ ์ฒ์์ ์ด๋์ ๋๋ง ์์ฑํด๋๊ณ ํ๊ณ๋ฅผ ๋์ด์๋ฉด ๊ทธ๋๊ทธ๋ ์ค์๊ฐ์ผ๋ก ์๋ก ์์ฑํ๋์์ธ๋ฐ ์ผ๋ฐ์ ์ผ๋ก๋ ์ด๋ ๊ฒ๋ค ๋ง์ด ์ฐ๊ธด ํจ. ๋ฌผ๋ก ๋์ด๋๋ ์๊ฐ ๋ถํ ๊ฑธ๋ฆด ์ ์๊ณ
gc ์๊ธฐ ๋๋ ๋ดค๋๋ฐ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์ญ์ ํผํฌ๋จผ์ค์ง
์์กฐ์ ์ค๋ธ์ ํธํ์ ์คํ์ ์ฐ๋ ์ด์ ๊ฐ ๋ชจ์ผ ๋ ํ๋ ์คํ์ด๋ ๋ญ์ธ๊นํ๋ค๊ฐ ๋ฑํ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์ ํ ์จ์๋๋ฐ - dc App
๋ฐ์ ๊ธ์ผ์ฌ๋์ธ๋ฐ ์ด ๊ฒฝ์ฐ ๋ฆฌ์คํธ ์ฌ์ด์ฆ๋ฅผ ๋ฐ๊ฟ๋ ๋น์ฉ์ด ๊ฒ๋ ๋ค์ด๊ฐ๋๋ฐ ๊ฐ์ ํ๋ง์ ๋ชฉ์ ์ด ๋ค๋ฅธ๊ฑฐ๊ณ ์ ์ฝ๋ฉ์ด๋ผ๊ณ ๋งํ๋๊ฑด ์ดํผ ์ค๋ก์ผ๋ง..
์ค..์ ๋ค์ด ๋๊ธ ๋ง์ด ๋ค๋ค..๋ด๊ฐ ํ๋ ๋ง์ ๋ด ์๊ฒฌ์ผ๋ฟ์ด์ผ..๊ทธ๋ฆฌ๊ณ ๋ด ์๊ฐ์ด๋..๋๋คํ๊ณ ์ธ์ฐ๊ณ ์ถ์ง๋ ์์..
ํ๋์ ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํ๋ค๋ ์ ๋ค์ ์ค์ ํ์ฌ ๊ฐ์ ํฐ๊ฒ์ ๋ง๋ค์ด๋ณด๋ฉด ๊ทธ ์๋ฆฌ ์ ๋ค์ด๊ฐ๊ฑฐ๋๊น ๊ฒฝํํด๋ณด๋ฉด ๋จ..์ฐจ๋ผ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ๊ณ ๋ฉ์์ง๋ก ์ฒ๋ฆฌํ๋ค์ ๊ด๋ฆฌ๋ฅผ ํ๋ค๋ก ์ธ์ฐ๋ฉด ๋ชฐ๋ผ๋ ํ๋๋ก ๊ด๋ฆฌํ๋ค๋ ๋ ์ดํด๊ฐ ์๋๋ค..๊ทธ ๋ง์๊ฑธ ๊ตฌ๋ถํ ์ ์์ด์ผ๋๊ณ ์๊ฐ๋ณต์ก๋๋ฅผ ์๊ฐํ๋ฉด ๊ฒ์์์ ํจ์ฌ ๋ถ๋ฆฌํจ..ํ๋ง๋๋ก ๊ฒฝํํด๋ณด๋ฉด ๋จ..
์คํ์ด๋ ๋ฆฌ์คํธ๋ ๊ฒฐ๊ตญ์ ์ด ๊ตฌ์กฐ๋ ์ฒ์์ ๋์จ๋์ด ์ฒ์์ผ๋ก ์ฃฝ๋๋ค๋ฉด ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋จ..ํ๋ง๋๋ก ๊ทธ๋ ๊ฒ ๊ฒ์์์ ๋๋ฆฐ๊ตฌ์กฐ๊ฐ ์๋๋ผ๋๊ฑฐ์ง..์ฒ์๋์จ๋์ด ์ฒ์์ผ๋ก ์ฃฝ๊ณ ์ถ๊ฐ,์ญ์ ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์คํ์ ์ฐ๋ฉด๋จ..๊ทผ๋ฐ ๋ ๊ทธ๋ฅ ์ด๋ ๊ฒ ํ๋ ๋ง๋ค์ด๋๊ณ ์ฌ๊ธฐ๋ ์ฐ๊ณ ์ ๊ธฐ๋ ์ธ๋..
๋ฆฌ์คํธ ์ฌ์ด์ฆ ๋ฐ๊พธ๋๋ฐ ๋น์ฉ๋ง์ด ๋ค์ด๊ฐ๋ค๋ ์๋ฆฌ๋ ๋ฐฐ์ดํ๊ณ ์ฐฉ๊ฐํ๊ฑฐ๋ผ๊ณ ์ดํดํ ๊ฒ...
ํ๋์ ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํ๋๊ฑด Bullet๊ณผ GuidedBullet๊ฐ์ด ๊ธฐ์กด์ ์์๊ด๊ณ๋ก ์ง์ฌ์ ธ์์๋งํ ๊ฒ๋ค์ ๋งํ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฑธ ํ๋์ ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํ์๋ ์ฃผ์ฅ์ด ์๋๋๋ค.
...? ๋ฆฌ์คํธ๋ ๋งํฌ๋๋ฆฌ์คํธ๊ฐ ๋ฐ๋ก ์๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด์๋์...
์ฌ์ง์ด ๋ฐฐ์ด์ด ๋ฆฌ์คํธ๋ณด๋ค ์ฌ์ด์ฆ ๋ณ๊ฒฝ์ด ๋น ๋ฅธ๊ฑธ๋ก ์๊ณ ์์๋๋ฐ..
๋ฆฌ์คํธ๋ณด๋ค ํ๋ง์์ ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ์จ์ผ๋๋ ์ด์ ๋ฅผ ์๋ ค์ฃผ์ธ์..๋ ๋ชจ๋ฅด๊ฒ ๋ค์..์ List๋ ๊ฒฐ๊ตญ์ ์์จ๋๋จ..ใ ใ ใ ์์งํ transform์๋ IEnumerable์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋์ ์์..์ด๋ฏธ ๋ถ์ด๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์์จ๋๋จ..๊ทธ๋ฅ ๋ด๊ฐ ๋๋ฒ๊น ํธํ๊ณ ๋ณด๊ธฐ ํธํ๊ณ ๊ทธ๋ฐ์ฉ๋์ด์ง..์์งํ ์์ด๋๋จ..๋ด๊ฐ ๊ถ๊ธํ๊ฑด ๋ฆฌ์คํธ๋ฅผ ์์ฐ๊ณ ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ์จ์ผ๋๋ ์ด์ ๊ฐ ๊ถ๊ธํจ..์๋ ค์ฃผ์ธ์..์์งํ ๋ชจ๋ฅด๊ฒ ๋ค์..
์๋จ ์ด ๊ตฌ์กฐ์์๋ ๋ฆฌ์คํธ๊ฐ ๋ง๊ธดํ๋ฐ ๋ฐฐ์ด๊ณผ ์ฐฉ๊ฐํ๊ฑฐ๋๋ ๋ง์ ์ข ์ธ์ปฅํ๊ฑฐ๊ฐ๋ค์ ๋ฐฉ๊ธ ์ ๋ง์ ์์ง๋ ๋ฆฌ์คํธ ์ฌ์ด์ฆ๋ณ๊ฒฝ์ ๋น์ฉ์ด ๊ฝค ์๋ค๋ ๋ง์ด์์ด์..
๋ฐฐ์ผ์ด ๋ฆฌ์คํธ๋ณด๋ค ์ฌ์ด์ฆ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค๋ฉด ๊ตณ์ด ๋ฐฐ์ด์ resize๋ผ๋ ํจ์๊ฐ ์กด์ฌํ ๊น์??๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ์ add๊ฐ์ ํจ์๊ฐ ์์๊น์??์ด๋ถ ์๋ฃ๊ตฌ์กฐ ๊ณต๋ถ ํ๋ฒ์ ํ์๊ณ ์ฝ๋ ์ ์ ๊ดํด์ ๋ ผํด์ผ๋์ง ์์๊น์??
Count๊ฐ ์ด๋ฏธย Capacity์ ๊ฐ์ผ๋ฉด ๋ด๋ถ ๋ฐฐ์ด์ ์๋์ผ๋ก ์ฌํ ๋นํ์ฌย List์ ์ฉ๋์ด ์ฆ๊ฐํ๋ฉฐ ๊ธฐ์กด ์์๊ฐ ์ ๋ฐฐ์ด์ ๋ณต์ฌ๋ ํ ์ ์์๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. msdn์ ๋ท๋ท๋ฌธ์ ๋ด์ฉ์ธ๋ฐ ๋ฐฐ์ด๊ณผ ๋ด๋ถ๊ตฌ์กฐ๋ ๊ฐ๊ณ ์ฌ์ฉ์ฉ๋๋ฅผ ๋ฌ๋ฆฌํ ์๋ฃ๊ตฌ์กฐ๋ก ์๊ณ ์๋๋ฐ ์ฌ์ด์ฆ ๋ณ๊ฒฝ์ ๋น์ฉ์ด ์๋ค์ด๊ฐ๋ค๊ณ ํ์๊ธธ๋..
๋ฐฐ์ด๋ณด๋ค ๋๋ฆฌ์ง ์๋๋ผ๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์๋์ผ๊ฑด๋ฐ ๋ฐฐ์ด๊ณผ ์ฐฉ๊ฐํ๊ฑฐ ์๋๋๊ณ ๋งํ์๊ธธ๋ ๋ง ํ๊ฑฐ์์ด์ฌ..
๋ด๊ฐ ๊ณ์ ์ด์๊ธฐ๋ฅผ ๋ํ๊ณ ํ๊ณ ์์๊น..๋ ์ด๋ฏธ ๊ฒ์์ ๊ณ๋ฅผ ๋ ๋๊ณ ๋ด์ผํ๋๋ฐ..๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ถ๋ถ ๋ด๊ฐ ๋๋๋ฌธ์ ์ฌ๋ง์ MSDN๊ฐ์ ์ฐพ์๋ด..์ ๋ถ๋ถ์ ๋ฌธ์์ด ๊ด๋ จ๋ ๋ถ๋ถ์ ๋ํ ์ค๋ช ์ด์๋์..๊ทธ๋ผ ๋ฌธ์์ด ๋ณต์ฌ์ ๋ํ ์ค๋ช ์ ํด์ผ๋จ..๊ทธ๋ผ ๋ฌธ์์ด ์ค๋ช ํ๋ฉด ๋ ๋๋ ๋ชจ๋ฅด๊ฒ stringbuilder๋ฅผ ์ธ๊ธํ๊ฒ ์ง...๊ทธ๋ผ ๋ ๋ฌดํ๋ฃจํ์ ๋น ์ง๊ฒ ์ง..์ด์งํผ ์ ์ด์ ์ทจ๋ฏธ๋ก ์ฝ๋ฉ๋งํ๋๋ฐ..์ ๋์ถฉ์จ๋๋ ๋ฏ..๋๋ฆฌ๋ฉด ์ด๋์..๋ป์ง๋ง ์์ผ๋ฉด๋์ฃ ..