Unity/Tips

Unity Coroutine 간단 사용 예시

최애뎡 2021. 11. 25. 19:34
728x90
반응형
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoroutineTest : MonoBehaviour
{
    class TempClass
    {
        public int index = 0;
    }

    class CoroutineEx : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            yield return 1;
            yield return null;
            yield return new TempClass() { index = 100 };
            yield return "String";
            yield break; // 정지
            yield return 5;
        }
    }

    Coroutine tempC = null;
    private void Start()
    {
        CoroutineEx test = new CoroutineEx();
        
        // coroutine은 Object 형식으로 아무거나 다 받을 수 있음 (클래스도~!)
        foreach (System.Object item in test)
        {
            if (item != null && item.ToString() == "CoroutineTest+TempClass")
            {
                TempClass temp = item as TempClass;
                Debug.Log(temp.index);
            }

            Debug.Log(item);
        }

        StartCoroutine(TempCoroutine(1f));
        
        // 요렇게 시작한 coroutine을 받을 수 있음
        tempC = StartCoroutine(TempStop());
        StartCoroutine(TempStopTest());
    }

    IEnumerator TempCoroutine(float wait)
    {
        for (int i = -1; ++i < 5;)
        {
            if (i == 4)
                yield break;

            yield return new WaitForSeconds(wait);
            Debug.Log("지금!");
        }
    }

    IEnumerator TempStop()
    {
        for (int i = -1; ++i < 5;)
        {
            yield return new WaitForSeconds(1f);
            Debug.Log("멈춰!");
        }
    }

    IEnumerator TempStopTest()
    {
        yield return new WaitForSeconds(1f);
        
        // 아까 위에서 받은 coroutine을 이릏게도 사용 가능
        StopCoroutine(tempC);
        tempC = null;
    }
}

 

반응형