Search
Duplicate

코루틴(Coroutine) 이란?

간단소개
유니티에서 빠질 수 없는 코루틴, 알아보자!
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Unity
Scrap
태그
코루틴
9 more properties

Co-routine

(co - 협동) + (routine)
사전적인 해석으로 코루틴은 협동 루틴이라는 의미를 가지고 있습니다.
그런데 루틴이란 뭘까요?
소스 파일 분야에서 루틴이란 작업을 정의한 집합을 의미합니다.
C언어에서는 작업을 정의한 명령어의 집합을 함수로 표현해, 루틴을 함수로 보기도 합니다.
다만 루틴은 한개의 함수만을 의미하는 것은 아니고 여러개의 함수로 루틴을 만들기도 합니다.
여기서 주된 흐름에 해당하는 루틴을 메인루틴(Main Routine), 메인루틴이 호출하는 루틴을
서브루틴(Sub Routine)이라고 합니다.
흐름의 예시)
예시로 C언어의 메인함수, 그리고 메인함수에서 호출되는 함수를 생각할 수 있습니다.
그런데 여기 문제점이 있습니다.
플레이어가 포션을 먹으면 다시 먹기까지 쿨타임을 주고 싶은데,
쿨타임을 카운트해주는 서브루틴을 실행하면 그동안 다른 작업들을 일체 수행할 수 없는 문제
발생합니다.
이러면 떠오르는게 아마 “비동기 작업”일거라고 생각합니다.
*(비동기 작업이란 한 작업이 끝나지 않았어도 다른 작업을 수행하는 작업을 의미합니다)
유니티는 비동기 작업의 수행을 위해 코루틴 함수를 지원하고 있습니다.
IEnumerator f_potion_count() { ... yield return null; }
C#
복사
서브루틴이 하나의 진입점과 탈출점을 가지고 있는 것과 달리,
코루틴은 여러개의 탈출점과 진입점을 가지고 있습니다.
코루틴이 호출되면 코루틴 내에 존재하는 작업들을 수행하다가
yield return 명령문을 만나면 메인루틴에게 흐름을 돌려주고 다시 흐름을 돌려받습니다.
흐름의 예시)
yield return 문에 있는 여러 옵션으로 흐름을 돌려주고 다시 되돌려받는 방식을 제어할 수 있습니다.
yield return null : 다음 프레임에 실행을 재개한다. yield return new WaitForSeconds : 지정된 시간 후에 재개한다. yield return new WaitForSecondsRealtime : Time.timescale 값에 영향을 받지 않고 지정된 시간 후에 재개한다. yield return new WaitForFixedUpdate : 모든 스크립트에서 모든 FixedUpdate가 호출된 후에 재개한다. yield return new WaitForEndOfFrame : 모든 카메라와 GUI가 렌더링을 완료하고, 스크린에 프레임을 표시하기 전에 호출된다.
C#
복사
https://notyu.tistory.com/62 (위 명령문 정리 출처)
한 코루틴 안에 여러개의 yield return 명령문도 사용 가능 합니다.
IEnumerator f_potion_count() { 작업-A ... yield return null; //한 프레임 대기 후 작업 B 실행 작업-B ... yield return WaitForSeconds(0.1f); //0.1초 대기후 작업 C 실행 작업-C ... (코루틴 종료) }
C#
복사
*잘못된 정보를 전달했거나 오류가 있다면 알려주세요! 감사합니다.