코루틴: 처리와 처리 사이에 대기 시간 삽입 가능,
여러 처리를 순차적으로 처리하는 것이 아니라 동시에 병렬로 처리할 수 있도록 함
ex. Fade in, out 기능을 구현하고 싶을 때
이렇게 하면 너무 빨라서 서서히 Fade in 처럼 안보임.
이럴 때 해결책은 중간에 대기시간을 넣어주는 것임.
알파값을 빼주고 대기하고 빼주고 대기하는 식으로 구현해야 함!
즉, 코루틴은 대기시간을 삽입할 수 있는 유니티 기능임
(C#에 없는 유니티에만 있는 고유 기능이기 때문에 문법을 신경 쓸 필요는 없음)
코루틴 특징 1: 코드 중간에 대기시간 삽입 가능
A 처리를 하고 yield문을 만난 순간 앵커 박고 명시되어 있는 시간 만큼 코드 밖으로 빠져 나가서 쉬다가
마지막 yield문으로 돌아와서 그 다음 코드 실행.
StartCoroutine안에 함수 또는 스트링 문자열로 함수 이름 넣을 수 있음.
ex.
StartCoroutine(FadeIn());
: 성능은 좋지만 나중에 인위적으로 멈출 수 없음
StartCoroutine("FadeIn");
: 코루틴 시작한 후 인위적으로 멈출 수 있음
위 그림처럼 "스트링" 형태로 쓰면 StopCoroutine 사용 가능!
코루틴 특징 2: 비동기 방식을 구현하는 방법 중 하나(병렬처리 구현 가능)
이 상태에서 코루틴을 두개 돌리면 어떻게 될까?
실행결과
비동기(Async)
끝나는 시점 안알려주니까 A가 시작되자마자 B 시작, B 시작되자마자 C 시작
즉, A가 끝나는 시점에 B가 시작되는 게 아님.
끝나는 시점을 안 알려주면 어떤 시점에 여러 작업이 동시에 처리(빨간색)되는
multi-thread 프로그래밍을 구현할 수 있음.
코루틴도 마찬가지.
끝나는 시점을 안 알려준다?
HelloUnity 코루틴이 끝나는 것을 기다리지 않고 HelloUnity 코루틴이 시작하고
바로 HiCSharp 코루틴이 시작됨.
마찬가지로 HiCSharp이라는 코루틴이 시작될 때 바로 Debug.Log("End"); 실행
따라서 총 소요시간은 8초가 아니라 5초가 걸림
코루틴은 무한 루프를 돌더라도 중간에 대기 시간이 있기 때문에 심각하게 터지진 않음
비슷한 이유로 9번째라인에서 10번째 라인으로 넘어갈 수 있는 이유는
무한루프일지라도 코루틴 덕분에 대기 시간이 있기 때문임.
대기시간 지정 안하고 null로 주면 대충 1/60초(한 프레임) 쉬게 된다!
'Unity' 카테고리의 다른 글
프롭 + 데미지 시스템 , Instantiate(), Tag & Layer , Physics (0) | 2021.07.15 |
---|---|
회전 포신, 포탄 만들기 (0) | 2021.07.15 |
UI / 오디오 / 최종빌드 (0) | 2021.07.13 |
싱글톤 (0) | 2021.07.13 |
인스턴스화 (0) | 2021.07.12 |
댓글