IEnumerator A()
{
Debug.Log("start")
yield return new WaitForSeconds(0.3f);
Debug.Log("stop");
}
๋ผ๋ ์ฝ๋ฃจํด์ด ์๋ค๊ณ ํด๋ด ์๋ค.
Coroutine cor = A();
StartCoroutine(cor);
5์ดํ
if(cor != null) StopCoroutine(cor);
๋ก ์ฝ๋ฃจํด์ ์คํ์ํค๋ฉด
์ ์์์๋ ์คํ ํ start๊ฐ ์ถ๋ ฅ๋๊ณ , 0.3์ด ํ์ stop์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ์.
๊ทธ๋ ์ง๊ฐ ์์ต๋๋ค.
๊ฒฐ๋ก ๋ง ๋ง์๋๋ฆฌ์๋ฉด, start๋ง ์ถ๋ ฅ๋๊ณ ์. stop์ 5์ด ๋ค์ ์ถ๋ ฅ๋์์ต๋๋ค.
์๋ง StopCoroutine์ด ์๋ ์ด์, cor์ด ์ค์ค๋ก ์ฝ๋ฃจํด ๋ด์์ null๋์ง ์๊ธฐ ์ํด WaitForSeconds๋ฅผ ๋ฌด์ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์๋๋ฐ์.
์ด๋ฐ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ ๊ฐ ์ํ๋ ๊ฒ ์ฒ๋ผ 0.3์ด ํ์ stop์ด ๋์ผํ๋์?
์ด ๋ฌธ์ ๋ก 2์๊ฐ ์ ๋ ๊ณ ๋ฏผํ๊ณ ์์ต๋๋ค. ์ด๋ป๊ฒ ํด์ผํ ๊น์?
A์ ์ด๋ฏธ 0.3์ด์ ๋ฉ์ถ๋ผ๊ณ ์จ์๋๋ฐ ํน์ ์ฝ๋ฃจํด ์ ๋ฐ์ดํธ์ ๋ฃ์ ๊ฑฐ์?
๋ค ๋ง์ต๋๋ค. ํ์ง๋ง, Input.GetKeyDown์ผ๋ก ์ธํด, rightarrow๋ฅผ ์ ๋ ฅํ๋ฉด ์๋ํ๋ ๋ฐฉ์์ ๋๋ค.
ํน์ ์์ํ๋ ๋ฌธ์ ๊ฐ cor์ด ๊ณ์ ์ ์ธ๋๋ฉด์ ์๊ฐ์ง์ฐ์ด ์ผ์ด๋๋ ๊ฒ์ด๋ผ๋ฉด, start๋ ๊ณ์ํด์ ๋ ์ผํ๋ ๊ฒ ์๋๊ฐ์? start๋ ๋จ ํ ๋ฒ ๋น๋๋ค..
๊ทธ๋ฌ๋ฉด stopCoroutine ์ง์ฐ๊ณ ํด๋ณด์
0.3์ด ์ ๊ธฐ๋ค๋ฆฌ๊ณ ๊ณง๋ฐ๋ก ์ข ๋ฃํ๊ณ ํ๋ฉด StopCoroutine์ด ๋จผ์ ์์ผํจ
๋ง์ฐฌ๊ฐ์ง๋ค์.. ์ฝ๋ ์ ๋ฌธ์ ์ฌ๋ฆฌ๋ฉด ์ข์ํ ๋ฐ ๋ต๋ตํ์์ฃ . ์ผ๋จ์ ์ข ๋ ๋ง์ ธ๋ด์ผ๊ฒ ๋ค์
์ค์ค๋ก nullํ๋จ์ ์๋๊ฒ ๊ฐ๋ ์ฝ๋ฃจํด ์ข ๋ฃ์ฒดํฌ ์ํ๊ณ stopcoroutine ์ฐ๋ฉด ์ข ๋ฃํ ์ฝ๋ฃจํด ์๋ค๊ณ ์๋ฌ๋จ - dc App
๊ทธ๋ ๊ตฐ์.. ์ข์ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค.
Coroutine์ ์ ๋ ๊ฒ ์ ์ธ๋ ๋ชปํ๊ณ ์ ๋ฐ์์ผ๋ก ์คํ๋ ๋ชป ์ํด A๊ฐ ์ข ๋ฃ๋๋๋ผ๋ null์ด ๋์ง๋ ์๊ณ ์ ๋ฐ์์ผ๋ก ์ฝ๋ฃจํด์ด ์ข ๋ฃ๋์๋์ง ํ์ธ๋ ๋ชปํจ ๋์ฒด ๋ญ ์คํํ๊ณ ๋ญ๊ฐ ์๋๋ค๋ ๊ฑด์ง..
ienumerator cor = a(); ๋ฅผ ๋งํ๋ ๊ฑฐ์? null ์ฒดํฌ๊ฐ ์ข ๋ฃ ์ฌ๋ถ ์ฒดํฌ๊ฐ ์๋๋ผ ๊ทธ๋ฅ cor์ ์ ์ธํ๋ ์ํ๋์? ๊ทธ๋ผ ์๋ฌด ์๋ฏธ๊ฐ ์์์ ๋๊ฐ ์ ์ํ ์ ์ฝ๋๋ฅผ ์ง์ ์คํํด๋ด ์ ์์ ์ผ๋ก 0.3์ดํ ์ข ๋ฃ๋ ๊ฑฐ์ ๊ทธ๋ฅ ๋ค๋ฅธ๋ฐ์ ์๋ชป ๋ง๋ค์ด์ ์ง์ฐ๋๋ ๊ฑฐ๊ฒ ์ง
์๊ฐํด๋ณด๋ ๊ทธ๋ ๋ค coroutine์ startcoroutine ํ์๋ ๊ฐ๋ณ์ ์ผ๋ก ๋์๊ฐ๋๊น ์คํํ์๋ ์์ฑํ ์ฝ๋ฃจํด ์ธ์คํด์ค๋ฅผ ๋ฐํ๋ฐ๋๊ฑฐ๋๊น - dc App
Coroutine cor = StartCoroutine(A()); ์๋ค์.. ์ฃ์กํฉ๋๋ค..
๊ทธ๋ ๊ฒ ์ ์ธํด๋ด์ผ ์ข ๋ฃ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค๋ ๊ฑฐ์ ์ฝ๋ฃจํด์ด ์ข ๋ฃ๋๋ค๊ณ ํด์ cor์ด null์ด ๋์ง ์์ ๋ณธ์ธ์ด ์ง ์ฝ๋ ๋ง์? ienumerator cor๋ก ์ ์ธํ ๋ค์ cor.movenext()๋ก true/false ๊ฒ์ฌํ๋ ๊ฑฐ ์๋?
์ง๋ฌธ๊ณผ ๋ด์ฉ์ด ํก์ค์์คํด์ ๋ค์ ๋ต๋ตํ์๊ฒ ์ง๋ง, ์ ๊ฐ ์ด ์ฝ๋๊ฐ ๋ง์ต๋๋ค. ์์์ ๋งํ ๊ฒ์ฒ๋ผ ํน์ ์ํฉ์์ ์ํ์ค์ธ ์ฝ๋ฃจํด์ด ์ข ๋ฃ๊ฐ ๋์ด์ผ ํ๋ ๊ฒ์ธ๋ฐ, ์ฝ๋ฃจํด์ด ํ๋๋ง ๋์์ผํ๊ธฐ์ ๋ณ์์ ์ฝ๋ฃจํด์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
ํ์ง๋ง, ์ฝ๋ฃจํด์ wait๊ฐ ์ ๋๋ก ์ ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ๊ธฐ์ ์ด๋ฐ ๊ธ์ ์ผ์ต๋๋ค. ๋ฌด์จ ๋ฌธ์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์์๋ก wait๋ฅผ ๋ฉ์ถ๊ฒ ํ ์์ธ์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
var co = StartCoroutine(A()); ์ด๋ ๊ฒ ์บ์ฑ์ ํด์ผ ์ ๋๋ก ๋จนํ
๋ณต๋ถ์ ํ ๊ฒ ์๋๋ค๋ณด๋ ์ค์ํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๊ธ ์ด ์ธ๊ฐ์ ๋๋ค. ์ ๊ฐ ์ฌ๋ฌ ์ค์๋ฅผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ธ๋ค์ ์ฐธ์กฐํด์ ์ข ๋ ์์๋ณด๊ณ ๋ฒ๊ทธ ํด๊ฒฐํ ํ ๋ค์ ๊ธ ์ฐ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๊ธ์ ์ญ์ ํ์ง ์๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. WaitForSecond๋ ์ ์๋ํ๋ค์. Debug,Log()๋ฅผ ์ฌ๋ฌ ๊ฐ ๋์์ ์ฌ๋ฌ ๊ฐ๋ค์ ์ ๋ ฅ์ ํ์ธํ๋๋ผ ์ ๊ฐ ์ ํ์ธ ๋ชป ํ ์๋ชป์ ๋๋ค. ๋ค์ ๋ต๋ตํ๊ณ ํก์ค์์คํ ์ง๋ฌธ๊ธ์ ์ฌ๋ฌ ๋ต๋ณ์ ๋ฌ์์ฃผ์ ์ ์๋๋ค ๊ฐ์ฌํฉ๋๋ค. ์์ผ๋ก๋ ์ง๋ฌธํ๊ธฐ ์ ์ ์ข ๋ ๊ผผ๊ผผํ ํ์ธํ๊ณ ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.