ํค๊ฐ์์๋ new List<GameObject>๋ก ์๋ก ๋ฆฌ์คํธ ๋ง๋ค์ด์
UiWidget์ ์์๋ค ๋ค ๋ด์์ฃผ๊ณ ๋ด๊ธด ๋ฆฌ์คํธ๋ฅผ ํด๋น ํ์ด์ฆ ํค๊ฐ์ value๋ก ์ฐ๊ณ ์๋๋ฐ
ํ์ด์ฆ ๋ฐ๋๋ฉด new๋ก ๋ง๋ list๊ฐ ์์ด์ ธ์ value๊ฐ๋ ๋ฐ๋๋๊ฑฐ ๊ฐ์๋ฐ
๋๊ธ ๋ณด๋๊น ์ด๊ฒ ์์๋ณต์ฌ๋๋ฌธ์ ๊ทธ๋ฐ๊ฑฐ ๊ฐ์๋ฐ ๊น์๋ณต์ฌ๋ก๋ ์ด์ผํด์ผ๋๋...
์๋๋ ์ฝ๋๋ด์ฉ
-----------------------------------------------------------------------------
void ChangePhase(KeyPhase phase)
{
ย ย if(CurrentKeyPhase == phase) return;
ย ย ย CurrentKeyPhase = phase
ย ย ย selectCurserList.Clear();
ย ย ย switch(CurrentKeyPhase)
ย ย ย {
ย ย ย ย ย case A:
ย ย ย ย ย ย ย ย if(!keyPhaseCurserListDic.ContainsKey(CurrentKeyPhase))
ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย List<GameObject> temp = new List<GameObject>();
ย ย ย ย ย ย ย ย for (int i = 0; i < Buttons.transform.childCount; ++i)
ย ย ย ย ย ย ย ย ย ย temp.Add(Buttons.transform.GetChild(i).gameObject);
ย ย ย ย ย ย ย ย ย keyPhaseCurserListDic[CurrentKeyPhase] = temp;
ย ย ย ย ย ย }
ย ย ย ย ย ย ย selectCurserList = keyPhaseCurserListDic[CurrentKeyPhase];
ย ย ย ย break;
ย ย ย ย ย case B:
ย ย ย ย ย ย ย ย if(!keyPhaseCurserListDic.ContainsKey(CurrentKeyPhase))
ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย List<GameObject> temp = new List<GameObject>();
ย ย ย ย ย ย ย ย for (int i = 0; i < systemObject.transform.childCount; ++i)
ย ย ย ย ย ย ย ย ย ย temp.Add(systemObject.transform.GetChild(i).gameObject);
ย ย ย ย ย ย ย ย ย keyPhaseCurserListDic[CurrentKeyPhase] = temp;
ย ย ย ย ย ย }
ย ย ย ย ย ย ย selectCurserList = keyPhaseCurserListDic[CurrentKeyPhase];
ย ย ย ย break;
ย ย }
}
ChangePhaseํจ์๋ Phase๋ณ๊ฒฝํ ๋ ๋ฑ ํ๋ฒ ํธ์ถํ๊ณ ๋์
๋๋ฆฌ๋ ์ค์ง ์ดํจ์์์๋ง ๊ฑด๋๋ ค
ํน์ ๋๊ฐ๋งํ๋ ํ์ด์ฆ๊ฐ ์ฌ๋ก๋ฉํด์ ๋ค๋ฅธ์ฌ์ผ๋ก ๊ฐ๋๊ฑฐ๋?
ใดใดใดใด ์๋ ํ์ฌ์์ ํ์ด์ฆ๋ง๋ค ํค๋งคํ ๋ฐ๋์ด์ฌ๋๋๋ฐ ๊ทธ๊ฑธ ๋์ ๋๋ฆฌ๋ก ์ ์ฅํ๋ ค๊ณ
๊ทธ๋ผ new ๋ฅผ ๊ณ์ ํด์ฃผ๊ณ ์์ด์ ์ ์ฅํ๊ฑฐ ๋ค ๋ ๋ฆฌ๊ณ ์๋๊ฑฐ ์๋?
ํค๊ฐ ์์๋๋ง newํด์ ๋ง๋๋๋ฐ ํด๋น ํค๊ฐ์ value๊ฐ์ด new ํด์ค list๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋๋ฐ ๋น ์ ธ๋์ค๋ฉด newํ list๊ฐ ์์ด์ง๋๊น ํด๋น ํคํ์ด์ฆํค๊ฐ์ value๊ฐ ์์ด์ง๋ ์ํฉ์ธ๋ฐ ์ด๊ฒ ์์๋ณต์ฌ์ฌ์ ๊ทธ๋ฐ๊ฑฐ๊ฐ์
์๋ ๋์ ๋ฌธ์ ๋ ๊น์๋ณต์ฌ ์์๋ณต์ฌ ์ด์ ์ ๋ ํผ๋ฐ์ค์ฐธ์กฐ๊ฐ ์ด๋์ ์ญ์ ๋๊ณ ์๋๊ฑฐ๊ฐ์๋ฐ ใ ใ ใ ใ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ๊น์๋ณต์ฌํ๊ณ ์ถ์ผ๋ฉด instanciate๋ก ๋ฐ๋ก ๋ง๋ค์ด์ ์น๋ค ๋ณต์ฌํด์ผํ๋๋ฐ ์ด๊ฒ ๋ฌธ์ ๊ฐ ์๋๊ฑฐ๊ฐ๊ฑฐ๋ .. ๋งค์ฐ ๋ฌด์ํ๊ฒ ํด๊ฒฐํ๋๋ฐฉ๋ฒ์ธ๋ฐ WeakReference๋ผ๋๊ฒ ์๊ฑฐ๋ ? ์ฌ๊ธฐ์ list๋ฅผ new WeakReference(list)๋ก ํด์ ๋ฐ์๋๋ค์์ ํ์ด์ฆ ๋์ด๊ฐ๋ค๊ฐ ๋์์์๋ WeakReference.isaliveํ์ธํด๋ด false๋ก ๋์๊ณ target๋ null์ด๋ฉด ๋๊ฐ ์ฝ๋๋ก ์ด๋๊ฐ์์ ์ด๋ป๊ฒ๋ ์ญ์ ํ๊ฑฐ์
๊ทธ๋ฅ ์ฝ๋์ฌ๋ ค๋ด ์ ์ฅํ๋๋ถ๋ถ์ด๋ ๋ค์ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋๋๋ถ๋ถ
์ฝ๋ ๊ธธ์ด์ ๋๊ธ๋ก ์๋ฌ๋ฆฌ๋ค ์ฌ๊ธฐ ๊ธ ์์ ํด์ ์ฌ๋ฆด๊ป
selectCurserList.Clear(); <- ์ด๊ฑธ selectCurserList = null; ๋ก ๋ฐ๊ฟ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
null? ์ ์๋ง
๋๋ค?? ์??
๋ฏธ์... ๋ ์ค๋ช ํ๋๋ฐ ์ฌ๋ฅ์ด์์ด ใ ใ ใ ใ selectCurserList.Clear() ์ด๊ฑฐ๋ ๋๊ฐ addํด๋ ผ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋๊ฑฐ๊ณ selectCurserList = null ์ด๊ฑด ๋์ ๋๋ฆฌ์์ ๊ฐ์ ธ์จ ๋ฆฌ์คํธ selectCurserList = keyPhaseCurserListDic[CurrentKeyPhase]์๊ฑฐ ์ ์ฐ๊ฒฐ์ ๋๋๊ฑฐ์
๊ทธ๋ผ ์ฒ์์ null๋ก ๋ฆฌ์คํธ์ ๋์ ๋๋ฆฌํค๊ฐ์ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ์ ๋์ด์ฃผ๊ณ CurrentKeyPhaseํค๊ฐ์ผ๋ก ์ ์ฅ๋์ด์๋ ๊ฒ์์ค๋ธ์ ํธ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ์ฐ๊ฒฐ์์ผ์ฃผ๋๊ฑด๊ฐ? Clear๋ ์์ ๋ด์ฉ๋ฌผ๋ง ๋น์์ฃผ๋๊ฑฐ๊ณ ์ฐ๊ฒฐ์ ๊ทธ๋๋ก์ธ๊ฑฐ๊ณ ?
์ค ๋๋ํ ์น๊ตฌ๊ตฌ๋ง ๋ด๊ฐ ๊ฐ๋ก๊ฐ์ด ๋งํด๋ ์ฐฐ๋ก๊ฐ์ด ์์๋ฃ๋ค ๋ง์ด!
๋๋ถ์ ๋์ ๋๋ฆฌ๋ก ๋ค ์ฒ๋ฆฌํด์ ํธํ๊ฒ ์ฌ์ฉ์ค์ด์ผ! ์ ๋ง ๊ณ ๋ง์ ใ ใ ใ ใ