'IEnumrator'에 해당되는 글 1건

  1. 2019.12.05 C# 코루틴

유니티는 단일 쓰레드로 동작한다. 하지만 코루틴을 사용하면 쓰레드를 사용하지 않고 멀티 태스킹을 구현 할 수 있다. C#에서 이터레이터는 프로그래머가 IEnumerator 를 구현할 수있도록 돕는 기능이다. 열거형의 MoveNext() 를호출 할 때마다. 해당하는 다음 값을 반환한다. 일반적으로 함수가 호출되서 끝나는 서브루틴의 개념과 달리 yield return 을 사용함으로써 그 위치를 기억하고 다음 호출 때 그곳부터 다음을 실핼 할 수있도록 하는 것이다. 그래서 여러개의 코루틴을 동작시키고 각기다른 시점에 yield가 반환되도록 한다면 마치 어러개의 쓰래드가 동시에 동작하는것과 같은 효과가 나타난다

 

아래의 예제는 코루틴을 실행할 때 함수를 직접 실행하는 방법과 함수의 이름 즉 스트링을 이용해 호출 하는 방법 두가지를 테스트 한다.

AAA(), BBB() 코루틴 함수는 1초마다 실행되며 2초 후에 코루틴은 멈추게 된다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    Coroutine coroutine1;

    void Start()
    {
        // 코루틴 실행 방법 (함수)
        // 파라미터를 여러 개 쓸 수 있다.
        coroutine1 = StartCoroutine(AAA());

        // 코루틴 실행 방법 (스트링)
        // 성능상 함수로 호출하는 것보다 느리다.
        // 파라미터를 1개만 쓸 수 있다.
        StartCoroutine("BBB");

        StartCoroutine(STOP());
    }

    IEnumerator AAA()
    {
        for(int i = 0; i < 10; i++)
        {
            print("i 의 값 = " + i);

            // 1초 마다 호출 하게 된다.
            yield return new WaitForSeconds(1f);
        }
    }

    IEnumerator BBB()
    {
        for(int j = 0; j < 10; j++)
        {
            print("j 의 값 = " + j);

            // 1초 마다 호출 하게 된다.
            yield return new WaitForSeconds(1f);
        }
    }

    IEnumerator STOP()
    {
        yield return new WaitForSeconds(2f);
        StopCoroutine(coroutine1);

        yield return new WaitForSeconds(2f);
        StopCoroutine("BBB");
    }
}

'프로그래밍 언어 > C#' 카테고리의 다른 글

C# 예외처리  (0) 2019.12.05
C# Action과 Func  (0) 2019.12.05
C# 람다식  (0) 2019.12.05
C# 형식 매개변수 T  (0) 2019.12.05
C# 인덱서  (0) 2019.12.05
Posted by 소블리애
,