- ์ํฉ -
ํด๋์ค ํ๋ง์ ์ํด ์ ๋ค๋ฆญ ๊ธฐ๋ฐ PoolingManagerBase๋ฅผ ์ฑ๊ธํค ํจํด์ผ๋กย ๊ตฌํํ๋ ค ํจ
- ์ง๋ฌธ -
์ด์งธ์ PoolingManagerBase๋ฅผ ์์๋ฐ์ ํด๋์ค์์ย
์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ํฌํจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง๋ค์ด์ง์ง ์๋์ง ์ง๋ฌธ์ ๋๋ค
- ๊ตฌ์ฑ -
๋จผ์ ์ ๋ค๋ฆญ ๊ธฐ๋ฐ Singleton> ํด๋์ค๋ฅผ ๊ตฌํํด๋์
์ฝ๋๋ ์๋์ ๊ฐ์
public abstract class Singleton : Component where T : Component
{
private static T _Instance = null;
public static T Instance
{
get
{
if (_Instance == null)
{
var gObject = new GameObject(typeof(T).ToString());
_Instance = gObject.AddComponent();
DontDestroyOnLoad(gObject);
}
return _Instance;
}
}
public static T Create() => Instance;
}
์์ดํ ๋ํ PoolingItemBase ํํ๋ก ์ก์๋๊ณ ์๋์ฒ๋ผย ITEM์ ์ค์ฝํ ๊ฑธ์ด๋
* public class PoolingItemBase<ITEM> whereย ITEMย : PoolingItemBase<ITEM>
๋ฐ๋ผ์ ์์ดํ ๊ด๋ฆฌ์ ๋ํ ์๋์ฒ๋ผย ITEM์ ์ค์ฝํ ๊ฑธ์ด๋
* public class PoolingManagerBase<ITEM> : SingletonITEM>> whereย ITEMย : PoolingItemBase<ITEM>
- ์ ์ฉ -
์ค์ ๋ก ์ฌ์ฉํด๋ณด๋ ค๊ณ ์๋์ ๊ฐ์ด ์์ ํด๋์ค๋ฅผ ๊ตฌ์ฑํจ
* public class TempItem : PoolingItemBase
* public class TempItemManager : PoolingManagerBase
- ๊ฒฐ๊ณผ -
Singleton์ย
_Instance = gObject.AddComponent();
๋ถ๋ถ์์ Null์ด ๋ฐํ๋จ
์ดํ๋์ ์ฝ์งํด๋ดค์ง๋ง ๋พฐ์กฑํ ์์ธ์ดย ๋ ์ค๋ฅด์ง ์๋ค์...
์ ๋ํฐ์์ ์ค์ฒฉ ์ ๋ค๋ฆญ์ ์ปดํฌ๋ํธ๋ก ์ฐ๋๊ฒ ์ ํ๋๋์??
์ฑ๊ธํค ์ ๋ค๋ฆญ์ ๋ฌธ์ ์์ด ๋์ํด์ ๋ ์ด์ํ๋ค์...
๊บพ์ ๊ดํธ๊ฐ ์์ ํ๋ค์... ์กฐ๊ธ ์ด์ํ ๋ถ๋ถ ์์ด๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค
gObject๊ฐ null์ด๋ผ์ ์ ๋ผ์ธ์ ๋๋ฒ๊น ์ด ์ฐํ๊ฑฐ ์๋? ๊ทธ๋ผ AddComponent ๋ฌธ์ ๊ฐ ์๋๊ฑฐ ๊ฐ์๋
gObject๋ new GameObject๋ก ์๋ก ํ ๋นํด์
AddComponent<Something>();
_Instance = AddComponent<T>();
๊ธ ๋ด์ฉ์ ํฌํจ ์์ผฐ๋๋ฐ html ์ฝ๋๋ก ์ธ์ํด์์ธ์ง ์ง์์ก๋ค์..