이 시리즈는 유니티에서 제공하는 튜토리얼을 정리해서 올린 것입니다.

-----------------------------------------------------------------------------------

코루틴(Coroutine)


코루틴은 일정한 간격으로 실행되는 메서드라고 생각할 수 있다.

이러한 메서드는 특별한 yield문과 함께 작동하여 메서드 밖으로 코드 실행을 반환한다.

그런 다음 메서드가 계속될 때, 중단된 지점부터 다시 시작된다.




솔직히 뭔 소린지 모르겠다.


코루틴의 정의보다는 기능을 중점으로 설명하자면

코루틴은 메서드의 실행을 유동적으로 조절할 수 있게 하는 기능이다.

해당 메서드의 작업을 원하는 시점에 중단시키고, 원하는 시점에 재개할 수 있으며

메서드의 실행을 여러 프레임에 분산시켜 실행할 수 있다.

-----------------------------------------------------------------------------------

먼저 코루틴의 문법에 대해 알아보자

24b0d121e09c28a8699fe8b115ef04699739f7bc

첫 번째로 살펴볼것은 코루틴 메서드이다

코루틴 메서드는 인터페이스 IEnumerator를 반환하는 메서드이다

즉 인터페이스 IEnumerator를 구현하는 모든 것을 반환할 수 있다.


두 번째로 살펴볼것은 yield return null이다. return은 익숙한데 yield return은 무엇일까?

yield는 양보한다는 뜻이다. 즉 메서드의 실행을 양보(중지)하고 return null , 다음 프레임까지 대기하겠다는 뜻이다.

return null에 대해서는 나중에 설명하겠다.


그 다음 살펴볼건 Start메서드 내에 StartCoroutine메서드이다.

이 메서드는 string 매개변수로 코루틴 메서드의 이름을 받아

해당 이름을 가진 코루틴 메서드를 시작하겠다는 뜻이다.



24b0d121e09c28a8699fe8b115ef046ecb4bccf4


그렇다면 이 코루틴 메서드의 실행을 한 줄 한 줄 따라가 보겠다.

1. 일단 start메서드에서 코루틴을 시작했으니 코루틴 메서드가 시작된다.

2. while 조건을 검사하고 참이기 때문에 num값을 1증가시킨다.

3. num값을 출력한다.

4. 코루틴 메서드의 실행을 yield(양보)한다. 따라서 나머지 코루틴 메서드의 실행은 중지되고 다음 프레임까지 대기한다(return null이기 때문에)

5. 여러 이벤트 함수의 실행 순서를 거쳐 코루틴의 순서가 왔다.

6. 다시 while조건을 검사하고 참이기 때문에 while 내부의 로직을 처리한다.

7. yield문을 만났기 때문에 다시 양보한다. 다음 프레임까지 대기.

...


이런식으로 총 100프레임 동안 코루틴 메서드가 진행된다.

-----------------------------------------------------------------------------------

yield 뒤에는 무엇이 올까?


우리는 null을 반환했다.

이는

"뭐... 특정 조건은 없고 다음 프레임까지 대기하셈" 이라는 뜻이다


yield 뒤에는 다양한 기능이 올 수 있다.


yield return WaitForSecond(second)는 넘겨준 second만큼 대기 후 다시 재개

yield return WaitForEndOfFrame()은 현재 프레임이 끝날때까지 대기 후 재개

yield break 코루틴을 즉시 종료

-----------------------------------------------------------------------------------

코루틴은 프로퍼티와 조합했을 때 더욱 강력해진다.


24b0d121e09c28a8699fe8b115ef046f584e9b99ac



24b0d121e09c28a8699fe8b115ef046ecf4acaf624


영상에서 훔쳐온 코드라 간단하게 설명하자면

플레이어가 땅 클릭시 클릭한 땅 좌표를 target값으로 set한뒤

코루틴을 통해 target값으로 물체를 이동시키는

클릭이동 기능을 구현한 것이다.


프로퍼티와 코루틴을 조합해

프로퍼티의 값이 변경될때(땅을 클릭했을때)

즉시 프로퍼티값이 의미하는 좌표로 이동하는 기능을 간단하게 구현할 수 있다.

-----------------------------------------------------------------------------------