์ค๋ธ์ ํธ A๊ฐ ํ์ด๋ ์์ํ๊ณ , ์ค๋ธ์ ํธ B๋ฅผ ํ์ด๋ ์ธ ํ๊ณ ์ถ์ด์
void stream () {
StartCoroutine("a");
StartCoroutine("b");
}
IEnumerator a () {
for๋ฌธ ์จ์ ์ฌ๋ผ์ง๋ ๊ฑฐ ๊ตฌํ (yield return null๋ก ๋งค ํ๋ ์๋ง๋ค ์กฐ๊ธ์ฉ ์ฌ๋ผ์ง)
}
IEnumerator b () {
for๋ฌธ ์จ์ ๋ํ๋๋ ๊ฑฐ ๊ตฌํ (yield return null๋ก ๋งค ํ๋ ์๋ง๋ค ์กฐ๊ธ์ฉ ๋ํ๋จ)
}
์ด๋ฐ ์์ผ๋ก ๋ง๋ค์๋๋ฐ ์ฝ๋ฃจํดa๋ ์ ์์ ์ผ๋ก ๋์๊ฐ์ ์ค๋ธ์ ํธ A๊ฐ ์ฌ๋ผ์ง๋๋ฐ, ๊ทธ ๋ค์์ ๋ฉ์ถฐ์ b๊ฐ ์๋์.
๊ทธ๋ฆฌ๊ณ ์ฝ๋ฃจํด์ ํ ๋ฒ ์คํํ๋ฉด ๊ณ์ ๋์๊ฐ๋ ๊ฑฐ ์๋๊ฐ? ์ฝ๋ฃจํดa๊ฐ ํ ์ผ์ ๋ง์น๋ฉด ์๋์ด ์ค์ง๋์ด์ผ ํ๋๋ฐ ๊ทธ๊ฑธ ์ด๋ป๊ฒ ํ๋ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
StopCoroutine ์ด๋ ๊ธฐ๋ฅ์ด ์๋๋ฐ ์ด๊ฑธ ์ด๋๋ค ๋ฃ์ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์...
๊ทธ๋ฅ ๋ฌด์ํ๊ฒย StartCoroutine("a"); ๋ฐ๋ก ๋ฐ์ย StopCoroutine("a"); ์ด๋ ๊ฒ ๋ฃ์๋๋ ์ฝ๋ฃจํดa๊ฐ ๋ฐ๋ก ๋ฉ์ถฐ๋ฒ๋ฆฌ๊ณ ...
์ฝ๋ฃจํดa๊ฐ ๋์๊ฐ ๋ค์์ ๋ค ๋๋๋ฉด ์ฝ๋ฃจํด b๊ฐ ๋์๊ฐ๊ฒ ํ๊ณ ์ถ์๋ฐ ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ด.
invoke๋ ์ ํด์ง ์๊ฐ๋ง ๋๊ธฐํ๋ค๊ณ ํ๊ณ ...
์ฝ๋ฃจํด์ด update()๋ ๋ฌ๋ฆฌ ๊ฐ๊ฒฉ์ ๋๊ณ ๋์จ๋ค๊ณ ํ๊ธธ๋ ์จ๋ดค๋๋ฐ ๊ฐ๋ ์ดํด๊ฐ ์ข ํ๋ค๋ค...
StopCoroutine ๊ธฐ๋ฅ์ ์ฝ๋ฃจํดa์ for๋ฌธ ์์ for ์ข ๋ฃ ์กฐ๊ฑด๋ถ๋ก ๋ฃ์ผ๋ ์ฝ๋ฃจํดb๊ฐ ์๋์ ํ๋๋ฐ, ์ฝ๋ฃจํดa๋ ์ฝ๋ฃจํดb๊ฐ ๋์์ ์๋ํ๋ค... ์ฝ๋ฃจํดa์ ์ฝ๋ฃจํดb ์ฌ์ด์ ๋๊ธฐ๊ฐ ์์ด์ผ ๊ฒ ๋๋ฐ..
yield return StartCoroutine("a"); ์ด๊ฑธ ์ฝ๋ฃจํดb ๋งจ ์ฒ์์ ๋ฃ์ผ๋๊น ์ ๋๋ก ์ฝ๋ฃจํดa -> ์ฝ๋ฃจํดb ์์๋ก ์งํ๋๋ค ๊ตฟ๊ตฟ
๋ญ๊ฐ ์ข ์ด์ํ๊ฒ ์ฐ๋๊ฑฐ๊ฐ์๋ฐ a ๋ค์ b๋๊น ๋น์ฐํ ์คํ์ a๋จผ์ ์คํํ๋๊ฒ ์ง๊ด์ ์ด๋๊น a๋ง์ง๋ง์ ๋ฆฌํด ์คํํธ ์ฝ๋ฃจํดb ์ด๋ ๊ฒ ์ฐ๋๊ฒ ๋์๊ฑฐ๊ณ ๋ฑํ ๋ฐฐ์ด๊ฐ์๊ฑฐ ๋๋๊ฑฐ ์๋๋ฉด while์ด๋ yield return wait 0.1์ด ํ๋๊ฒ ํจ์ ์ข์ ์ ์ด์ ์ฝ๋ฃจํด ์ฐ๋ ์ด์ ๊ฐ ๋๋ถ๋ถ yield new return wait ์ผ๋ก ์๊ฐ์ฐจ ์ฝ๋ ๋ง๋ค๋ ค๊ณ ํ๋๊ฑฐ
a ๋ง์ง๋ง์ return StartCoroutine("b"); ์ด๋ ๊ฒ? return ์์ yield๋ ๋ถ์ด์ง ๋ง๊ณ ? ์ด๋ฌ๋ฉด ์๋์๋ stream ํจ์์ ์๋ StartCoroutine("a"); ํญ๋ชฉ์ ์ ๊ฐ์ด ๋ฆฌํด๋ผ์ ์ฝ๋ฃจํดb๊ฐ ์์ํ๋ ๊ฑฐ์ผ? ๊ทธ๋ผ ๋ณธ๋ฌธ์ฒ๋ผ ์ฝ๋ฃจํดa ์ฝ๋ฃจํดb ์์ํ๊ฒ๋ ์๋ก ๋ถ์ด์ง ์์๋ ๋..๋?
์์ ์ for๋ฌธ์ผ๋ก ๋์์๊ธธ๋ for๋ฌธ์ ์จ๋ดค๋๋ฐ.. for๋ฌธ ๋์ yield return null; ๋ฃ์ด์ ํ๋ ์๋ง๋ค ๊ฐฑ์ ๋๊ฒ๋ ํ๋ ๊ฑฐ ๊ฐ๋๋ผ๊ณ . ์ ๊ทผ๋ฐ ์ด๋ฌ๋ฉด ํ์คํ ํ์ฌ ํ๋ ์์ ๋ฐ๋ผ ์๊ฐ์ด ๋ค๋ฅด๊ฒ ์ง๋๊ฐ๊ฒ ๋ค. ๊ทธ๋ผ ๋ณดํต while๋ฌธ + yield return new WaitForSeconds ์ด๋ ๊ฒ ์จ? null์ ํ๋ ์๋จ์, new WaitForSeconds๋ ์๊ฐ๋จ์ ์ฒดํฌ์ฉ์ธ๊ฐ?
์ ํ์คํ null ๋์ ์ new WaitForSeconds๋ฅผ ์จ๋ ๋๋๊ตฌ๋. return StartCoroutine์ ์์ yield๋ฅผ ์๋ถ์ด๋ฉด ์๋ฌ๊ฐ ๋จ๋ค. ๊ทธ๋ผ a ๋ง์ง๋ง์ yield return StartCoroutine("b"); ์ด๋ ๊ฒ ๋ถ์ฌ์ผ ํ๋? ๊ทผ๋ฐ ์ด๋ฌ๋ฉด ์ฝ๋ฃจํดb๊ฐ ์์ํ ๋ค์์ ์์ํ๋ค๋ ์๋ฏธ๊ฐ ๋๋๊ฑด๊ฐ?
๊ทธ๋ฌ๋ฉด '์ฝ๋ฃจํดa ์งํ -> ์ฝ๋ฃจํดa ๋ง์ง๋ง์ ์ค๋ฉด ์ฝ๋ฃจํดb๊ฐ ์์ํ๊ธฐ ์ ๊น์ง ๋ฉ์ถค' ์ด๋ ๊ฒ ์๋๊ฐ? ๊ทผ๋ฐ ์ด๋ฌ๋ฉด ์ฝ๋ฃจํดb๊ฐ ์ฝ๋ฃจํดa๋ ๊ฐ์ด ์์ํ๋ ๊ฑธ ๋ง์์ฃผ๋ ๊ฒ ์๋ ๊ฑฐ ๊ฐ์๋ฐ...
ใดใด ๋ด๋ง์ a ์ฝ๋ฃจํด ์์์ ์ฝ๋ฃจํด ์คํํธ b๋ฅผ ํ๋๊ฒ ๋ ์ง๊ด์ ์ด์ง ์๋ ๋ผ๋ ๋ง์ด์์. yield ๋นผ๋จน๊ณ ๋งํ๊ฑด ์ฝ๋ฃจํด์ด๋๊น ๋ฌด์กฐ๊ฑด yield ๋ถํ์ผ๋๋๊ฑฐ์๊ณ
a์ฝ๋ฃจํด ๋๊ณ ๊ทธ๋ค์์ b ๋๊ฒ ํ๊ณ ์ถ์๊ฑฐ์์ ๊ทธ๋ฌ๋ฉด a์ฝ๋ฃจํด ๋ง์ง๋ง์ค์ b์ฝ๋ฃจํด ์์ ์ฐ๋ฉด ๋จ
์ํ ๊ทธ๋ ๊ตฌ๋ ํจ์ ํ๋์ ์ฝ๋ฃจํดa->์ฝ๋ฃจํดb ์ด๋ ๊ฒ ๋ฃ์ง ๋ง๊ณ ์ฝ๋ฃจํดa ๋ง์ง๋ง์ ์ฝ๋ฃจํดb ์์ํ๋๋ก ๋ง๋ค๋ฉด ํจ์์์ ์ฝ๋ฃจํด a ๋๊ณ ๋๋๋ฉด b๊ฐ ์์๋๋๊ตฌ๋
์ฝ๋ฃจํด ๋ด๋ถ์์ new ๋ ์ง์ํด๋ผ.
new๋ฅผ ์ฐ์ง ์๊ณ ์ฝ๋ฃจํด WaitForSeconds๋ ์ด๋ป๊ฒ ์ฐ๋ฉด ๋จ? ์ฝ๋ฃจํด ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ WaitForSeconds๋ฅผ ์ ์ธํด์ค์ผ ํ๋?
๊ทธ๋ฆฌ๊ณ ๋ฆฌํด๊ฐ null์ ์๋ชจ๋ฅด๊ฒ ๋๋ฐ 1ํ๋ ์ ๋๊ธฐ๋ waitfor fixed์๋ ๊ทธ๊ฑฐ์ฐ๋ฉด๋จ
์ฝ๋ฃจํด ๋ด๋ถ์์ new๋ฅผ ์ค์ด๋ ๋ง ๋ณด๊ณ ์๊ฐ๋๊ฑด๋ฐ ๊ทธ๋ผ ์ฝ๋ฃจํด์ ์ต๋ํ ์์ถํด์ ์ฐ๋๊ฒ ์ข์๊ฑด๊ฐ? ๊ทธ๋ฌ๋๊น ์ฝ๋ฃจํด ๋ด๋ถ์์ ์ผ์ด๋๋ ์ฐ์ฐ์ ์ต๋ํ ์ค์ด๋๊ฑฐ?
์ ๋ง๋ก ์ฝ๋ฃจํดa ๋์ ์ฝ๋ฃจํดb ์์ํ๋๋ก ๋ฃ์ผ๋๊น ์ ๋์๊ฐ๋๊ตฌ๋.. ์ ๊ธฐํ๋ฉด์๋ ํํธ์ผ๋ก ๋๋ฌด ๊ฐ๋จํ ๋ฐฉ๋ฒ์ธ๋ฐ ์ด๊ฑธ ์ ๋ชฐ๋์์ง ํ๋ ์๊ฐ๋ ๋ ๋ค... ์๋ ค์ค์ ๊ณ ๋ง์์
์ฝ๋ฃจํด ์์ํ ๋, ๋ฐ๋ณต๋ฌธ ์ธ๋ถ์์ waitforseconds asdf = new waitforseconds(1); ๋ง๋ค๊ณ , ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ๋ง๋ค์ด๋์ asdf ๋ฅผ ์ฌ์ฉํด๋ผ. ์ธ๋ฐ์๋ ๋น์ฉ๋ญ๋น๋ฅผ ์ค์ฌ๋ผ. ํด๋น ์ฝ๋ฃจํด ํธ์ถ๋น๋๊ฐ ๋์ผ๋ฉด ์ฝ๋ฃจํด ๋ด๋ถ์์๋ ๋นผ๋ด์ ํด๋์ค ํ๋์ ์ฌ๋ ค๋๋ผ. ๊ทธ๋ฅ ์ต์ ํ๋ฐฉ๋ฒ์ด์ง, ๋ฐ๋์ ์ด๋ ๊ฒ ํ๋ผ๋ ๋ง์ ์๋. ์๋๋ค, ๊ทธ๋ฅ ๊ฐ์๋ฆฌ์. ๋ฌด์ํด๋๋จ.
asdf๋ฅผ ์ ๋ ๊ฒ ๋ง๋ ๋ค์์, ์ฝ๋ฃจํด์์ ์ธ ๋ yield return asdf; ์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋? ์ต์ ํ๋ ๊ฐ๋ฅํํ ํ๋ฉด ํ ์๋ก ์ข์ ๊ฑฐ๋๊น ์์๋ฌ์ ๋์ ๊ฑฐ ์๋ค๊ณ ์๊ฐํจ. ์๋ ค์ค์ ๊ณ ๋ง์.
ใ ใ ์ฌ์ฉ๋ฒ์ ๋ง์ด. ๊ทธ๋ ๊ฒ ์ฐ๋ฉด ๋ผ.