인프런 커뮤니티 질문&답변

박미라님의 프로필 이미지

작성한 질문수

밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작

서브 루틴 (Coroutine)

섹션2: 서브루틴

23.07.11 17:30 작성

·

289

0

질문1. 코루틴은 코루틴이 대기하는 동안 Start()의 다른 함수나 Update() 함수가 진행되는 건가요?

예를들어 밑에 코드에서 cortDT1이 Start()에서 시작하고, 1초 기다리는 동안 Start()의 그 밑에 있는 함수가 실행되는 건가요? 그러면 Update()는 언제 실행되는 건가요? 실행순서가 궁금합니다!

public class Cort3 : MonoBehaviour
{   
    Coroutine cortDT1;
    Coroutine cortDT2;

    // Start is called before the first frame update
    void Start()
    {
        cortDT1 = StartCoroutine(DelayTime(1));
        cortDT2 = StartCoroutine(DelayTime(2));
    }

    // Update is called once per frame
    void Update()
    {   
        if(Input.GetKeyDown("space")){
            StopAllCoroutines();
        }
    }

    IEnumerator DelayTime(float time){

        while(true){
            yield return new WaitForSeconds(time); //메인루틴(update함수)으로 양도권 양보
            print(time + "초 만큼 경과");
        }
    }
}

 

답변 1

0

게임 트레이너님의 프로필 이미지
게임 트레이너
지식공유자

2023. 07. 11. 22:02

안녕하세요.

코루틴은 개념상으로는 스타트나 업데이트 함수와 별개로 진행됩니다. 즉, 코루틴은 스타트나 업데이트 함수의 진행과 무관하게 따로 실행된다고 생각하시면 됩니다.

  • cortDT1이 Start()에서 시작하고, 1초 기다리는 동안 Start()의 그 밑에 있는 함수가 실행되는 건가요?

맞습니다. 코루틴은 스타트 함수에서 호출하는 그 순간부터 별도의 프로세스로 진행됩니다.

  • 그러면 Update()는 언제 실행되는 건가요? 실행순서가 궁금합니다!

정확히는 코루틴은 업데이트 함수 다음에 실행되고, yield가 있을 경우 지정된 시간만큼 대기하다가 지정된 시간이 경과하면 업데이트 다음에 다시 실행됩니다.