728x90
코루틴은 작업을 다수의 프레임에 분산하는 메서드다. 즉 시간이 걸리는 작업을 프레임을 멈추지 않고 실행할 수 있도록 하는 기능이다. 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드다.
=> 한 프레임에서 모든 작업을 처리하지 않아도 되고, 연속적으로 작동하도록 할 수 있다.
코루틴과 함께 yield 키워드를 사용하여 특정 조건이나 시간이 걸릴 때까지 대기시킬 수 있다.
코루틴은 스레드가 아니다. 겉보기에 멀티 스레드마냥 보이지만 사실 단일 스레드로 동작하는 동기식이다.
코루틴 사용 예시
1. 코드 사이에 몇초 대기시키기
코루틴을 배운 이후로는 Invoke 대신 많이 사용하게 되는 것 같다
void Start()
{
StartCoroutine(ExampleCoroutine());
}
IEnumerator ExampleCoroutine()
{
Debug.Log("코루틴 예시 1번");
yield return new WaitForSeconds(2f); // 2초 대기
Debug.Log("2초 후 실행됨!");
}
2. 다음 프레임까지 대기
IEnumerator FrameWaitExample()
{
Debug.Log("코루틴 예시 2번");
yield return null; // 다음 프레임까지 대기
Debug.Log("다음 프레임에서 실행됨!");
}
🔄️ 반복 실행시키는 방법
코루틴으로 실행시키는 함수 내에 while문과 yield return문을 사용하면서 게임 진행과 동시에 반복작업을 할 수 있다.
예시 1
3D 개인 과제 때 사용해보았다. 카메라를 부드럽게 회전하는 코드이다.
예시 2
유니티 입문 팀 프로젝트로 제작한 '레전드 닌자' 게임에서 공격을 구현할 때 사용되었다(by 태겸님). 닌자가 공격할 때 같이 발사되어야 하는 무기들의 Attack을 코루틴으로 계속 돌리고 있다.
그리고 코루틴으로 공격의 딜레이를 설정해준 모습이다. 레전드 닌자는 캐릭터가 멈춰있을 때 계속 자동으로 공격이 나가기 때문에 공격을 구현하신 팀원분께서 while 코루틴을 활용하셨다.
그 외 yield return 종류
- yield return new WaitUntil(조건) 조건이 참이 될 때까지 대기
yield return new WaitUntil(() => Input.GerKeyDown(KeyCode.Space)); // 스페이스 키 누를 때까지 대기
- yield return new WaitWhile(조건) 조건이 거짓이 될 때까지 대기
yield return new WaitWhile(() => Time.time < 5f); // 게임 시간이 5초 미만인 동안 대기
- yield break 코루틴 실행 즉시 종료
IEnumerator CoroutineWithBreak()
{
Debug.Log("작업 시작");
yield return new WaitForSeconds(1f);
Debug.Log("코루틴 종료");
yield break; // 코루틴 강제 종료
}
728x90
'공부 기록 > 유니티 Unity' 카테고리의 다른 글
[Unity/TIL] 렌더링 파이프라인과 URP에 대하여 | 에셋이 분홍색으로 보이는 현상 (3) | 2025.03.21 |
---|---|
[Unity/TIL] 시네머신 활용 정리 (추적, 전환, 흔들림) (0) | 2025.03.20 |
[Unity/TIL] 제네릭 활용(제네릭 싱글톤, 제네릭 오브젝트 풀 예제) (1) | 2025.03.08 |
[Unity/TIL] AI Navigation 사용해서 NPC 구현 (0) | 2025.03.06 |
[Unity/TIL] 유니티 숙련 과정에서 알게 된 것들 (0) | 2025.03.05 |