- ์ƒํ™ฉ -

ํด๋ž˜์Šค ํ’€๋ง์„ ์œ„ํ•ด ์ œ๋„ค๋ฆญ ๊ธฐ๋ฐ˜ 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์ด ๋ฐ˜ํ™˜๋จ


์ดํ‹€๋™์•ˆ ์‚ฝ์งˆํ•ด๋ดค์ง€๋งŒ ๋พฐ์กฑํ•œ ์›์ธ์ดย ๋– ์˜ค๋ฅด์ง€ ์•Š๋„ค์š”...

์œ ๋‹ˆํ‹ฐ์—์„  ์ค‘์ฒฉ ์ œ๋„ค๋ฆญ์„ ์ปดํฌ๋„ŒํŠธ๋กœ ์“ฐ๋Š”๊ฒŒ ์ œํ•œ๋˜๋‚˜์š”??

์‹ฑ๊ธ€ํ†ค ์ œ๋„ค๋ฆญ์€ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•ด์„œ ๋” ์ด์ƒํ•˜๋„ค์š”...