์ฝ”๋ฃจํ‹ด์—์„œ ์–‘๋ณด๋ช…๋ น (YieldInstruction)๋กœ ํ™œ์šฉ๋˜๋Š” ์—ด๊ฑฐ์ž๋Š”(Enumerator)๋Š” IEnumerator์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์ •์˜ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต Enumerator๊ฐ™์€ ๊ฒฝ์šฐ STL์˜ ๋ฐ˜๋ณต๊ธฐ(iterator)์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜๊ธฐ์œ„ํ•ดย ์ œ๋„ค๋ฆญํด๋ž˜์„œ์—์„œ ํ™œ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


์–ด์จŒ๋“ , ์œ ๋‹ˆํ‹ฐ์—์„œ new WaitForSeconds(); new WaitForFixedUpdate(); new WWW(); ๋“ฑ๋“ฑ๋งŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ

์ด ์—ด๊ฑฐ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด ์ง์ ‘ ๋งŒ๋“œ๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.




IEnumerator ์ธํ„ฐํŽ˜์ด์Šค ์ž…๋‹ˆ๋‹ค. Current ์ ‘๊ทผ์ž์™€, MoveNext, Rest ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ฒ ๊ตฐ์š”.

์ด๋ฅผ ํ™œ์šฉํ•ด์„œ WaitForSeconds๋ฅผ ํ‰๋‚ด๋‚ด๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ด…๋‹ˆ๋‹ค.






์ž ์ผ๋‹จ ์ตœ์†Œ ๊ตฌํ˜„ํ•ด์•ผํ•  ์„ธ๊ฐ€์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋นจ๊ฐ„์ค„์ด ๋œจ๋Š”๊ฑด return์ด ์—†์–ด๊ฒ ์ฃ ?

์ผ๋‹จ WaitForSeconds๋Š” ํŠน์ • ์ดˆ๋งŒํผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค.


MoveNextํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ true๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๋™์•ˆ yield return ๋ฌธ์— ๋ณต๊ท€ํ•˜๊ฒŒ ๋˜๋ฉฐ false๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ๊ทธ๋•Œ ํƒˆ์ถœํ•ฉ๋‹ˆ๋‹ค.

Reset์˜ ๊ฒฝ์šฐ ๋”ฐ๋กœ ํ˜ธ์ถœ๋˜์ง€๋Š” ์•Š์œผ๋‚˜, ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ์ฝ”๋ฃจํ‹ด์ด false๊ฐ€ ๋ ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ผ๋‹จ ๊ตฌํ˜„ํ•ด๋ณผ๊นŒ์š”?




๊ตฌํ˜„๋„ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.ย 

์ƒ์„ฑ์ž์—์„œ ๋ช‡์ดˆ ๊ธฐ๋‹ค๋ฆด์ง€๋ฅผ ์„ค์ •ํ•˜๊ณ , MoveNext์—์„œ ์‹ค์ œ ์‹œ๊ฐ„์„ ์ฒดํฌํ•˜๋ฉด์„œ ์‹œ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ,

์‹œ๊ฐ„์ด ์™„๋ฃŒ๋˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜์ „์— Reset์„ ํ˜ธ์ถœํ•ด ์ค๋‹ˆ๋‹ค.





์ฝ”๋ฃจํ‹ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.





์ด๋ ‡๊ฒŒ ์—ด๊ฑฐ์ž๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๋ฉด ๋‹ค์–‘ํ•œ๊ฒƒ๋“ค์„ ๋งŒ๋“ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.~