금일 또한 강의 영상과 챌리저반 수업을 진행하였다. 코르틴과 에이싱크, 동기 비동기를 다뤘다. 무엇인지 알지만 정확하게 설명할 정도로 알고있지 않아 이에 대해 적어볼 것이다.
Unity에서 시간이 걸리는 작업(로딩, 애니메이션 등)을 처리할 때 코드를 "잠시 멈췄다가 다시 이어서 실행"해야 하는 경우가 있다. 이럴 때 사용하는 대표적인 방법이 코루틴(Coroutine)과 async/await 이다.
코루틴(Coroutine)
- Unity에서 제공하는 '비동기' 흐름 제어 방식
- 메인 스레드를 멈추지 않고, 중간에 멈췄다가 나중에 이어서 실행 가능
IEnumerator WaitAndPrint() { Debug.Log("3초 대기 시작"); yield return new WaitForSeconds(3f); Debug.Log("3초 후 실행됨!"); } void Start() { StartCoroutine(WaitAndPrint()); } //예시 코드- 반드시 IEnumerator 반환형으로 선언하고, StartCoroutine()으로 호출
- yield return으로 멈춤점을 만듬
- 프레임 단위, 시간, 조건 등으로 다양하게 대기가 가능
- Unity 메인 스레드 안에서만 동작
async/await (에이싱크, 어싱크X)
- C# 언어 문법 기반의 비동기 처리 방식
- 코루틴보다 더 범용적인 코드 작성 가능하다고 함
- *Unity 2017 이후부터 사능 가능
using System.Threading.Tasks; async void Start() { Debug.Log("3초 대기 시작"); await Task.Delay(3000); Debug.Log("3초 후 실행됨!"); } //예시 코드
- await는 비동기적으로 작업을 기다림
- 비Unity환경에서도 사용 가능하다고 함
동기 비동기
구분 설명 예시 동기 한 작업이 끝나야
다음 작업이 실행됨줄 서서 기다리는 방식 비동기 기다리지 않고, 다른 작업을
동시에진행할 수 있음번호표를 뽑고 다른 일
하다가 호출되면 가는방식
알던 개념도 확실하게 아는 게 아니면 금일처럼 제대로 한 번 더 공부하는 것이 좋아보여 앞으로 이런 글이 많아 질 것 같다. 그리고 쓰다보니 내가 이해하는 방향으로 적다보니 비전공자들이 봐도 이해 가능한 글을 쓰는 목표에서 벗어난 것 같다. 다음부턴 약간 더 글을 유하게 써볼 것 이다.