세상에 존재하는 프로그램은 분야에 따른 특성을 가지고 있고 게임 역시 마찬가지다.
게임의 특성이라 함은 일단 멈추는 경우가 거의 없다는 것이다.
메뉴를 띄우는 경우가 아니면 멈추지 않고 심지어 메뉴로도 멈출 수 없는 게임이 있다.
아닌데? 라고 말하는 사람들이 있겠지만 현재 나와 있는 게임중 플레이어의 조작이 없다고 음악이 멈추거나 배경그래픽이 정지하는 게임은 없다.
그래서 프레임마다 정보를 갱신시켜 게임을 현실 세계처럼 만들어 주는 Update패턴이 존재한다.
그런데 잠시만 Update가 필요한 상황이 있을 것이다.
예를 들어 롤에서 귀환처리를 Update로 했다 생각해보자.
Update는 플레이어가 B 버튼을 눌렀는지 계속 체크한다. -> B를 누르면 8초동안 움직임이나 방해가 없었는지 체크한다. -> 귀환에 성공하면 다시 B 버튼을 눌렀는지 체크한다.
한게임당 귀환을 평균적으로 몇번 하는지 모르지만 나 같은 경우는 15번 정도 했던거 같다.
그렇다면 120초만 귀환 처리를 위해 연산처리를 하면 되는데, Update에서 구현하면 어마어마한 리소스가 낭비되고 있다 말할 수 있다.
그래서 이때 필요한 것이 코루틴이다.
docs.unity3d.com/2020.1/Documentation/ScriptReference/Coroutine.html
Unity - Scripting API: Coroutine
Coroutine class in UnityEngine / Inherits from:YieldInstruction / Implemented in:UnityEngine.CoreModule Description MonoBehaviour.StartCoroutine returns a Coroutine. Instances of this class are only used to reference these coroutines, and do not hold any e
docs.unity3d.com
일단 유니티에서 코루틴은 비동기가 아니다.
그렇게 보일뿐이지 차례를 기다리며 실행하는 동기식 함수다.
그러면 어떤식으로 동작하는가

코루틴 실행 순서
null - Update구문의 수행이 완료될 때까지 대기한다.
WaitForEndOfFrame - 현재 프레임의 렌더링 작업이 끝날 때까지 대기한다.
WaitForFixedUpdate - FixedUpdate구문의 수행이 완료될 때까지 대기한다.
WaitForSeconds - 지정한 초만큼 대기한다.
WWW - 웹에서 데이터의 전송이 완료될 때까지 대기한다.
(WaitForSeconds or null처럼 재시작한다.)
Another coroutine - 새로운 코루틴은 yielder가 재시작되기 전에 완료 될 것이다.
코루틴은 yield return을 통해 메서드가 다시 실행되는 순간을 설정하고 유니티는 매프레임마다 조건이 완료되었는지 확인 후 코루틴을 실행한다.
'게임 프로그래밍 > Unity' 카테고리의 다른 글
| 터치한 위치에 UI 띄우기 (0) | 2021.11.12 |
|---|---|
| 비쥬얼 스튜디오 유용한 단축키 (0) | 2021.11.12 |
| 작동 이후 특정 시간이 지난 후 다시 동작하는 코드를 원한다면 (0) | 2021.11.12 |
| 스크롤 뷰 (0) | 2021.11.12 |
| 오브젝트에 마우스를 올리면 정보 출력 (0) | 2021.11.12 |




최근댓글