๐ Coroutine์ด๋?
**์ฝ๋ฃจํด(Coroutine)**์ Unity์์ ์ ๊ณตํ๋ ํน๋ณํ ํจ์๋ก, ์์ ์ ํ๋ฆ์ ์ค๊ฐ์ ์ผ์์ ์งํ๊ณ , ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๋ค์ ์ด์ด์ ์คํํ ์ ์๋ค.
์ฝ๋ฃจํด์ IEnumerator ๋ฐํํ์ ๊ฐ์ง๋ฉฐ, StartCoroutine() ํจ์๋ฅผ ํตํด ์คํ๋๋ค.
IEnumerator ExampleCoroutine()
{
Debug.Log("1์ด ๋๊ธฐ ์ ");
yield return new WaitForSeconds(1f);
Debug.Log("1์ด ๋๊ธฐ ํ");
}
StartCoroutine(ExampleCoroutine());
โ๏ธ Coroutine ์คํ ํ๋ฆ
์ฝ๋ฃจํด์ Update() ํจ์๊ฐ ๋๋ ๋ค ์คํ๋๋ค.
์ฆ, ๋ชจ๋ Update() ํจ์๊ฐ ํธ์ถ๋ ์ดํ, ์ฝ๋ฃจํด์ด yield returnํ ์ง์ ๋ถํฐ ์ฌ๊ฐ๋๋ค.
โฑ๏ธ ๋ค์ํ YieldInstruction ์ข ๋ฅ
YieldInstruction | ์ค๋ช |
yield return null | ๋ค์ ํ๋ ์๊น์ง ๋๊ธฐ ํ ์ด์ด์ ์คํ |
yield return new WaitForSeconds(x) | x์ด ํ์ ์ด์ด์ ์คํ |
yield return new WaitForFixedUpdate() | ๋ชจ๋ FixedUpdate() ์ดํ์ ์คํ๋จ |
yield return new WaitUntil(() => condition) | ์ฃผ์ด์ง ์กฐ๊ฑด์ด true๊ฐ ๋ ๋๊น์ง ๋๊ธฐ |
yield return new WaitWhile(() => condition) | ์ฃผ์ด์ง ์กฐ๊ฑด์ด false๊ฐ ๋ ๋๊น์ง ๋๊ธฐ |
yield return www | WWW ์์ฒญ(์น ์์ฒญ)์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ (UnityWebRequest ๊ถ์ฅ) |
yield return StartCoroutine(Other()) | ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ |
๐ Coroutine ์ค๋จ ๋ฐ ์ข ๋ฃ
- ์ค๋จ: StopCoroutine("ํจ์์ด๋ฆ"), StopCoroutine(์ฝ๋ฃจํด๋ณ์)
- ๋ชจ๋ ์ฝ๋ฃจํด ์ข ๋ฃ: StopAllCoroutines()
Coroutine myRoutine;
void Start()
{
myRoutine = StartCoroutine(MyCo());
}
void StopIt()
{
StopCoroutine(myRoutine);
}
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์ฝ๋ฃจํด์ ๋ณ์๋ก ์ฌ์ฉํ์ง ์๋๋ค๋ฉด StopCoroutine์ํด๋ ๋ฉ์ถ์ง ์๋๋ค ์๋ํ๋ฉด ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ด๋ค!!
โ ์ธ์ Coroutine์ ์ฌ์ฉํด์ผ ํ ๊น?
์ฌ์ฉ | ์ฌ๋ก์ค๋ช |
์ฐ์ถ ์ฒ๋ฆฌ | ํ๋ฉด ์ ํ, ํจ๊ณผ ํ์ด๋ฐ, ๋๊ธฐ ํ ์คํ ๋ฑ |
์๊ฐ ๊ธฐ๋ฐ ๋ฐ๋ณต | ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋์ ๋ฐ๋ณต (์: ์ด์ ๋ฐ์ฌ ์ฟจํ์) |
์กฐ๊ฑด ๋๊ธฐ | ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ฒ๋ฆฌ |
๋น๋๊ธฐ ์์ | ์น ์์ฒญ, ํ์ผ ๋ก๋ฉ ๋ฑ ์๋ฃ๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ |
๐ง ์ฃผ์ํ ์
- yield return new WaitForSeconds()๋ Time.timeScale์ ์ํฅ์ ๋ฐ๋๋ค. (0์ด๋ฉด ๋ฉ์ถค)
- MonoBehaviour๊ฐ ๋นํ์ฑํ๋๋ฉด ์ฝ๋ฃจํด๋ ๋ฉ์ถ๋ค.
- ์ฝ๋ฃจํด ๋ด์์ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ง๋ค๋ฉด ๊ฒ์์ด ๋ฉ์ถ ์ ์๋ค.
๐งช ์์: ๊ฐ๋จํ ๋ฐ๋ณต ๊ณต๊ฒฉ
IEnumerator AutoAttack()
{
while (true)
{
Attack();
yield return new WaitForSeconds(1f); // 1์ด๋ง๋ค ๊ณต๊ฒฉ
}
}
๐ ๋ง๋ฌด๋ฆฌ
์ฝ๋ฃจํด์ Unity ๊ฐ๋ฐ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋๊ตฌ ์ค ํ๋์ด๋ค.
์ฒ์์ Update()๋ณด๋ค ๋ณต์กํ๊ฒ ๋๊ปด์ง ์ ์์ง๋ง, ์ต์ํด์ง๋ฉด ํ์ด๋ฐ ์ ์ด, ์ฐ์ถ ๊ตฌํ, ๋๊ธฐ ์ฒ๋ฆฌ์ ๋งค์ฐ ์ ์ฉํ๋ค.
ํ ..์๋ ๊ฐ๋ฐํ ๋ ์ฝ๋ฃจํด์ ๋ง์ด ์ผ์๋๋ฐ ์ธ๋ณดํฌ๋ ๋ง์ด ์ฌ์ฉํ๋ ๋ฏ ํ๋ค ์ธ๋ณดํฌ์ ์ฝ๋ฃจํด ๋น๊ตํ๋ ๊ธ๋ ํ๋ฒ ์์ฑํด ๋ด์ผ๊ฒ ๋ค.