Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

폐관수련

코루틴 (Coroutine) 본문

Programming/unity

코루틴 (Coroutine)

믜믜 2021. 10. 29. 15:44

코루틴 (Coroutine)

메서드는 return 구문을 만나거나 그 메서드가 끝날때까지 실행된다.

하지만 코루틴 메서드에서는 yield return 구문을 만나게 되면 그 구문의 조건을 충족할 때까지 메서드가 정지되고 해당 메서드를 호출한 곳으로 돌아가 그 뒤를 실행한다. (중간에 조건이 충족되면 다시 코루틴 메서드 중단지점 이후부터 실행한다)

 

void Work()
{
    // 오전업무
    
    StartCoroutine(Eat());
    
    // 오후업무
}

IEnumrator Eat()
{
    // 점심을 먹는다
    
    yield return 저녁 시간까지 기다린다
    
    // 저녁을 먹는다
}

오전업무가 끝나고 Eat 메서드가 호출되어 점심을 먹는다.

yield return 구문의 조건대로 저녁 시간까지 Eat 메서드는 중단된다.

오후업무를 하다가 저녁 시간이 되면 다시 Eat 메서드의 중단지점 이후부터 실행된다.

 

코루틴 시작 및 종료

코루틴 시작 및 종료 함수는 매개변수가 각각 string 또는 (반환값이 IEnumerator인)method이다.

// Start
public Coroutine StartCoroutine(string methodName)
public Coroutine StartCoroutine(string methodName, object value)
public Coroutine StartCoroutine(IEnumerator routine)

// Stop
public void StopCoroutine(IEnumerator routine)
public void StopCoroutine(Coroutine routine)
public void StopCoroutine(string methodName)

 

String

  • 매개변수를 하나만 적용할 수 있다.
  • 코루틴 함수 이름을 잘못 적어도 오류가 나지 않는다.
  • string이기 때문에 오버헤드가 발생하지만, 이 후 method 방법과 성능 차이는 없다.
  • StopCoroutine을 사용할 때 string으로 중지시켜야 한다. 또한, 이름이 같은 모든 코루틴을 중지시킨다.

Method

  • 매개변수를 여러 개 적용할 수 있다.
  • StopCoroutine을 사용할 때 반환 값을 저장한 뒤 저장된 반환 값을 사용하여 중지시킨다.
private Coroutine tmpCo;

private void StartMyCoroutine()
{
    if(tmpCo != null)
    {
    	StopCoroutine(tmpCo);
    }
    
    tmpCo = StartCoroutine(MyCoroutine());
}

 

'Programming > unity' 카테고리의 다른 글

이벤트 함수  (0) 2021.11.02
DOTween  (0) 2021.10.26
스프라이트 (Sprite)  (0) 2021.10.22
Comments