// Unity C# Script
void Start()
{
// 코루틴에게 제어권을 넘김.
StartCoroutine(CoroutineTest());
}
// IEnumerator를 반환
private IEnumerator CoroutineTest()
{
// 플레이 버튼을 눌렀을 때 동작 시간.
Debug.Log($"1 : {Time.realtimeSinceStartup}");
yield return null; // 한 프레임 대기 후 실행
Debug.Log($"2 : {Time.realtimeSinceStartup}");
yield return new WaitForSeconds(1f); // 1초 대기 후 실행
Debug.Log($"3 : {Time.realtimeSinceStartup}");
}
Output:
1 : 3.019858
2 : 3.032970
3 : 5.057276
// 코루틴의 1초는 정확한 1초로 떨어지지 않기 때문에 (보통은 1초 이상 걸림)
// 실제 계산이나 정교한 계산을 할 때는 코루틴을 쓰지 않는다.
// 연출할 때 유용하게 사용한다.
// Unity C# Script
void Start()
{
// 메소드 이름을 넘겨줄 수도 있다.
// 실무에서는 오타 때문에 이름을 넘기는 것은 잘 사용하지 않음.
// 같은 구문.
StartCoroutine(CoroutineTest());
StartCoroutine("CoroutineTest");
}
private IEnumerator CoroutineTest()
{
Debug.Log($"1 : {Time.realtimeSinceStartup}");
yield return null;
Debug.Log($"2 : {Time.realtimeSinceStartup}");
yield return new WaitForSeconds(1f);
Debug.Log($"3 : {Time.realtimeSinceStartup}");
// 코루틴을 실행하는 주체는 StartCoroutine을 호출하는 스크립트인데,
// 결국에는 GameObject에서 코루틴을 관리하게 된다.
}
Output:
1 : 3.004708
1 : 3.009927
2 : 3.019537
2 : 3.019891
3 : 4.102481
3 : 4.102903
// 두 개의 코루틴이 별개로 동작하게 된다.
// Unity C# Script
void Start()
{
Coroutine coroutine = StartCoroutine(CoroutineTest());
StartCoroutine("CoroutineTest");
StopCoroutine(coroutine); // 코루틴 정지.
}
private IEnumerator CoroutineTest()
{
Debug.Log($"1 : {Time.realtimeSinceStartup}");
yield return null;
Debug.Log($"2 : {Time.realtimeSinceStartup}");
yield return new WaitForSeconds(1f);
Debug.Log($"3 : {Time.realtimeSinceStartup}");
}
Output:
1 : 3.023257 // 첫 번째 코루틴 실행하고 StopCoroutine을 만나 정지.
1 : 3.028298 // 두 번째 코루틴 실행.
2 : 3.037791
3 : 5.273876
// Unity C# Script
void Start()
{
StartCoroutine(CoroutineTest());
}
private IEnumerator CoroutineTest()
{
Debug.Log($"1 : {Time.realtimeSinceStartup}");
// CoroutineTest 코루틴 동작중에 CoroutineTest2를 실행.
// CoroutineTest2를 마치고 CoroutineTest를 마저 실행.
yield return StartCoroutine(CoroutineTest2());
Debug.Log($"2 : {Time.realtimeSinceStartup}");
yield return new WaitForSeconds(1f);
Debug.Log($"3 : {Time.realtimeSinceStartup}");
}
private IEnumerator CoroutineTest2()
{
Debug.Log($"4 : {Time.realtimeSinceStartup}");
yield return null;
Debug.Log($"5 : {Time.realtimeSinceStartup}");
yield return new WaitForSeconds(1f);
Debug.Log($"6 : {Time.realtimeSinceStartup}");
}
Output:
1 : 3.063264
4 : 3.068327
5 : 3.078072
6 : 5.415286
2 : 5.415732
3 : 6.419126