이제까지 배운 것들을 되돌아 보는 시간을 가지기 위해 블로그 작성을 시작하였다.
내가 잘 알았던 것, 잘 알지 못했던 것들을 기록하면서 더 나은 프로그래머가 되기를 원한다.
오늘은 Coroutine에 대해서 되돌아 보는 시간을 가진다.
yield return null;
을 사용하여야 한다.*IEnumerator
1. C# Iterator Interface가 프로그래머에게 IEnumerator를 구현 할 수 있도록 도와준다.
2. IEnumerator는 데이터의 목록을 하나씩 넘겨줄 때 사용되는 인터페이스이다.
서브루틴과 코루틴의 차이
- 서브루틴: 일반적인 함수에서 사용되는 작동개념. 시작할 때 진입하는 지점을 저장하고, return 구문에 의해서 종료되는 지점을 저장한다.
- 서브루틴은 호출될 때마다 코드의 첫 부분부터 다시 실행 하지만, 코루틴은 중단되었던 코드의 다음 위치 부터 실행한다.
- 진입지점이 1개인 서브 루틴에 비해, 코루틴은 진입 지점을 여러개 정의할 수 있다.
함수의 코드가 실행한 결과를 반환한다.
코루틴이 정의된 작업을 실행하다가 yield return 구문을 만나면,
*지정된 명령 을 실행시키고, 코루틴을 호출했던 루틴으로 잠시 제어 권한을 넘겨준다.
순서 | 지정된 명령 | 설명 |
---|---|---|
1 | null | 다음 프레임까지 대기 |
2 | WaitForSeconds(float) | 지정한 시간(단위: 초)만큼 대기 |
3 | WaitForFixedUpdate() | 다음 FixedUpdate 프레임까지 대기 |
4 | WaitForEndOfFrame() | 모든 렌더링 작업이 끝날 때까지 대기 |
5 | WWW(string) | 웹 통신 작업이 끝날 때까지 대기 |
6 | AsyncOperation | 비동기 작업이 끝날 때까지 대기 |
- StartCoroutine의 매개변수로 함수를 전달하여 호출할 수 있다.
StartCoroutine(CoroutineMethod());
- 호출하고자 하는 함수의 이름을
string
으로 전달하여 호출할 수 있다.StartCoroutine("CoroutineMethod");
단, 함수의 이름으로 문자열의 형식으로 전달하면 간편하게 사용할 수 있지만 실제 함수를 찾는 과정이 필요하기 때문에 성능이 저하될 수 있다.
- 호출하고자 하는 함수의 매개변수가 1개 이상일 때, 다음과 같이 호출할 수 있다.
Startcoroutine("CoroutineMethod", 1.0f);