์๋ ์๋ค์.
๋ค๋ค Dev๋ ์ ๋ผ๊ฐ๊ณ ์๋.
์ค๋ Button.onClick.AddListener์๋ค๊ฐ ๋๋ค์ ๋ฃ๋ ๊ณผ์ ์์ ์๊พธ ์ด์ํ ์๋ฌ๊ฐ ๋์ ์ดํด๋ณด๋์ค์ ํด๊ฒฐ์ ํ๊ฑฐ๋ ?
์ด๊ฒ ์ ๋ํฐ์ Mono ๊ตฌํ๊ณผ์ ์์ ๋ฒ๊ทธ๋ผ๋๋ฐ ํด๊ฒฐ๋ฒ์ด ๋์์๋ ๊ธ์ด 2016๋ ๋ ๊ธ์ด๋ผ ์์ง๋ ์๊ณ ์ณ์ก๋?
์๋๋ฉด ๋ด๊ฐ ๋น ๊ฐ๋ผ์ ๋ฌธ๋ฒ์ ์ ๋ชฐ๋๋๊ฑด๊ฐ ํด์ ๋ฌผ์ด๋ณด๋ฌ์์ด.
์ ๋์ถฉ
๋ฒํผ 5๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด์ ์์ํด๋ณด์.ย
๋ฐฐ์ด์ ์ํํ๋ฉด์ ๋๋ค์์ ์ฒ๋ฃ์ด์ค๊บผ์ผ.
for(int i = 0 ; i < 5 ; i ++)
{
buttons[i].onClick.AddListener( () =>
{
Debug.Log(i);
}
}
๊ทธ๋ค์ ๊ฒ์์์ ๋ฒํผ 5๊ฐ๋ฅผ ์ ๋ถ ๋๋ฅด๋ฉด ๋๋ฒ๊ทธ ๋ก๊ทธ๊ฐ ๋ช์ผ๋ก ๋จ๋ ๋ดค๋๋
๋ชจ๋ 5๋ผ๊ณ ๋จ๋๋ผ.
๋๋~
์ด๊ฑธ ํด๊ฒฐํ๋ ค๋ฉด
for(int i = 0 ; i < 5 ; i ++)
{
int index = i;
buttons[index].onClick.AddListener( () =>
{
Debug.Log(index);
}
}
์๋ ๊ฒ i๋ฅผ ๋ก์ปฌ๋ณ์๋ก ํ๋ฒ ์ ์ฅํด์ฃผ๊ณ ์ฌ์ฉํ๋ฉด ์ํ๋ ๊ฐ 0, 1, 2, 3, 4 ๊ฐ ๋์ค๋๋ผ.
๋๋ง ๋ชฐ๋๋?
ํ ใ ใ ใ
์ด๊ฑด ๋ฒ๊ทธ๊ฐ ์๋๋ผ closure๊ณผ ๊ด๋ จ๋๊ฒ. ์์ธํ๊ฑด
https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example