[Memo-Unity] 7. ์ฝ๋ฃจํด (Coroutine)
์นดํ ๊ณ ๋ฆฌ: MeMo Unity
ํ๊ทธ: C#, MeMo Unity
์ฝ๋ฃจํด (Coroutine)
1. ์ฝ๋ฃจํด (Coroutine)
์ฝ๋ฃจํด์ ์ฌ์ฉํ๋ฉด ์์
์ ๋ค์์ ํ๋ ์์ ๋ถ์ฐํ ์ ์์ต๋๋ค.
Unity์์ ์ฝ๋ฃจํด์ ์คํ์ ์ผ์ ์ ์งํ๊ณ ์ ์ด๋ฅผ Unity์ ๋ฐํํ์ง๋ง ์ค๋จํ ๋ถ๋ถ์์ ๋ค์ ํ๋ ์์ ๊ณ์ํ ์ ์๋ ๋ฉ์๋์
๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์คํ์ ์๋ฃํ ๋ค ํธ์ถํ ๋ฉ์๋์ ์ ์ด์ ์ ํ์ ๋ฐํ ๊ฐ์ ๋ฐํํฉ๋๋ค. ์ฆ ๋ฉ์๋ ๋ด์์ ๋ฐ์ํ ๋ชจ๋ ํ๋์ ๋จ์ผ ํ๋ ์ ์ ๋ฐ์ดํธ ๋ด์์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฅธ ์ด๋ฒคํธ์ ์ํ์ค๋ ์ ์ฐจ์์ ์ ๋๋ฉ์ด์ ์ ํฌํจํ๊ธฐ ์ํด ๋ฉ์๋ ์ฝ์ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ํฉ์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
void Update()
{
if (Input.GetKeyDown("f"))
{
StartCoroutine(DoCheck());
}
}
IEnumerator DoCheck()
{
for(;;)
{
//์คํ์ฝ๋
yield return new WaitForSeconds(.1f);
}
}
- StartCoroutine(DoCheck()); ๋ก ์ฝ๋ฃจํดํจ์ ์ฌ์ฉ
- IEnumerator DoCheck() ~~~
- WaitForSeconds(xf); x์ด๊ฐ WaitForSeconds
2. ์ฝ๋ฃจํด ์ ์ง
StopCoroutine๊ณผ StopAllCoroutines์ ์ฌ์ฉํ์ฌ ์ฝ๋ฃจํด์ ์ ์งํ ์ ์์ต๋๋ค.
์ฝ๋ฃจํด์ ์ฐ๊ฒฐ๋ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ๋นํ์ฑํํ๊ธฐ ์ํด SetActive๋ฅผ false๋ก ์ค์ ํ๋ฉด ์ฝ๋ฃจํด์ด ์ ์ง๋ฉ๋๋ค.
Destroy(example) (์ฌ๊ธฐ์ example์ MonoBehaviour์ ์ธ์คํด์ค)๋ฅผ ํธ์ถํ๋ฉด OnDisable์ ์ฆ์ ํธ๋ฆฌ๊ฑฐํ๋ฉฐ Unity๋ ์ฝ๋ฃจํด์ ์ฒ๋ฆฌํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์ ์ง์ํต๋๋ค. ๋ง์ง๋ง์ผ๋ก OnDestroy๋ ํ๋ ์ ๋์์ ํธ์ถ๋ฉ๋๋ค.
3. 12/18 ์ถ๊ฐ
์ฝ๋ฃจํด์ ํจ์์ ์คํ์ ์ผ์ ์ค์งํ๊ณ , ์ดํ์ ๋ค์ ์ฌ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์์) ๋ฌด์ ์ํ 5์ด
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
bool invincible = false;
void Start()
{
StartCoroutine(InvincibilityCoroutine());
}
IEnumerator InvincibilityCoroutine()
{
invincible = true;
yield return new WaitForSeconds(5f);
invincible = false;
}
}
4. Yeild ์ข ๋ฅ
- yield return null :
๋ค์ ํ๋ ์
๊น์ง ๋๊ธฐ- yield return new WaitForSeconds(float) : ์ ๋ ฅํ
์ด(sec)
๋งํผ ๋๊ธฐ- yield return new WaitForSecondsRealtime(float) : Timescale์ํฅ์๋
์ค์ ์๊ฐ
๊ธฐ์ค ์ด ๋๊ธฐ- yield return new WaitFixedUpdate() : ๋ค์ ํ๋ ์์
FixedUpdate
๊น์ง ๋๊ธฐ- yield return new WaitForEndOfFrame() : ๋ชจ๋
๋๋๋ง ์์ ์ด ๋๋ ๋
๊น์ง ๋๊ธฐ- yield return startCoroutiune(string) : ์ ๋ ฅํ
๋ค๋ฅธ ์ฝ๋ฃจํด์ด ๋๋ ๋
๊น์ง ๋๊ธฐ- yield return new www(string) : ์ ๋ ฅํ
์น ํต์ ์์ ์ด ๋๋ ๋
๊น์ง ๋๊ธฐ- yield break : ์ฝ๋ฃจํด ์ข ๋ฃ
์ฝ๋ฃจํด์ StopCoroutine๊ณผ StopAllCoroutines๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋ฃจํด์ ์ ์ง๊ฐ๋ฅํ๋ฉฐ
์ฝ๋ฃจํด์ ์์ ํ๊ณ ์๋ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ์ ์งํ๊ฑฐ๋ ํ๊ดดํ๋ ๊ฒฝ์ฐ์๋ ์ข
๋ฃ๋ฉ๋๋ค. ๋จ, ์ปดํฌ๋ํธ๋ฅผ .enabled๋ฅผ false๋ก ํ๋ ๊ฒฝ์ฐ ๊บผ์ง์ง ์์ต๋๋ค.
5. Enumerator
- Enumerator๋ IEnumerator ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
- IEnumerator ์ธํฐํ์ด์ค๋ Current (์์ฑ), MoveNext() (๋ฉ์๋), Reset() (๋ฉ์๋) ๋ฑ 3๊ฐ์ ๋ฉค๋ฒ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ,
Enumerator๊ฐ ๋๊ธฐ ์ํด์๋ Current์ MoveNext() ๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ ๋ํฐ์ DelayedCallManager๊ฐ ๋ฑ๋กํ๊ณ ์๋ค๊ฐ ๋ค์ ๋จ๊ณ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค.
24.01.01 ์ถ๊ฐ
- ๋ค์์ ํ๋ ์์ ๋ถ์ฐ์์ผ์ ์คํํ ์ ์๋ ๋ฌธ๋ฒ
- ์ผ๋ฐ ๋ฉ์๋๋ 1ํ๋ ์์ ์คํ
- ์ฝ๋ฃจํด์ ๋์์ ์ด๋ค, ๋น๋๊ธฐ X
Coroutine coroutine = null
void Update()
{
coroutine = StartCoroutine(CoFade())
if(input.GetKeyDown("t"))
{
if(coroutine !=null) StopCoroutine(coroutine)
}
}
- StopCoroutine(ํจ์๋ช ()) ์ ์ํ๋ ๋์ ๋ฉ์ถ์ง ์์ ์๋ ์๋ค.
- StopCoroutine(โํจ์๋ช โ), stopAllCoroutine
- StopCoroutine(โํจ์๋ช โ)์ ์ถ์ ์ด์๋๋ค.
- ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ์๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํ์.
- Waitforsecont ๋ณด๋ค ๊ฒ์์ ํ๋ ์์ ๋ง์ถ๊ณ waitforendofframe์ ์ฐ๋ฉด ๋ชจ๋ ์ปดํจํฐ์ ๊ธฐ์ค์ ๋๊ฐ์ด ๊ฐ๋ฅ.
- yield return WWW ์๋ฒ๊ด๋ จ
[C#] ์ฝ๋ฃจํด (Coroutine)
์ฐธ์กฐ
TOP
๋๊ธ๋จ๊ธฐ๊ธฐ