GameDev/[Unity]
[유니티]코루틴(Coroutine) 개념과 사용 방법
Bit by Bit
2024. 12. 3. 08:08
728x90
✨ 코루틴이란?
유니티에서 **코루틴(Coroutine)**은 시간 지연이나 비동기 작업을 쉽게 구현하기 위한 기능입니다.
게임 개발에서는 대기나 점진적인 작업을 처리해야 할 때가 많습니다. 예를 들어:
- 캐릭터가 일정 시간마다 점프할 때 ⏳
- 적이 몇 초 간격으로 스폰될 때 🐉
- 서서히 화면이 밝아지는 효과를 줄 때 🌅
이 모든 걸 코루틴으로 간단히 구현할 수 있어요!
🛠️ 코루틴의 사용법
코루틴은 IEnumerator를 반환하는 함수로 작성되며,
StartCoroutine 메서드를 통해 호출됩니다.
🧩 기본 형태:
using System.Collections;
using UnityEngine;
public class CoroutineExample : MonoBehaviour
{
void Start()
{
// 코루틴 실행
StartCoroutine(MyCoroutine());
}
// 코루틴 함수 정의
IEnumerator MyCoroutine()
{
Debug.Log("코루틴 시작!"); // 코루틴이 호출됨
yield return new WaitForSeconds(2); // 2초 대기
Debug.Log("2초 후 실행됨!"); // 대기 후 실행되는 코드
}
}
🔍 코루틴의 특징
- yield return으로 제어
- yield return을 사용해 대기하거나, 다른 코루틴/작업을 중단 후 재개할 수 있어요.
- 예시:
- yield return new WaitForSeconds(1) 👉 1초 대기
- yield return null 👉 다음 프레임까지 대기
- 병렬 작업 가능
여러 코루틴을 동시에 실행해 비동기적인 효과를 쉽게 구현할 수 있습니다. 🕒 - 중단과 종료
- StopCoroutine() 또는 특정 조건으로 종료 가능.
📚 간단한 예제: 적 스폰 시스템
적을 3초 간격으로 스폰하는 코루틴을 만들어볼게요!
using System.Collections;
using UnityEngine;
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab; // 스폰할 적 프리팹
public Transform spawnPoint; // 스폰 위치
void Start()
{
// 적 스폰 코루틴 시작
StartCoroutine(SpawnEnemies());
}
IEnumerator SpawnEnemies()
{
while (true) // 무한 반복
{
Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity); // 적 생성
Debug.Log("적이 스폰되었습니다!"); // 확인 로그
yield return new WaitForSeconds(3); // 3초 대기
}
}
}
💡 추가 팁
- 최적화: 무한 루프가 부담이 된다면 조건에 따라 break로 루프를 종료하세요.
- 유용한 코루틴 사용 예:
- 페이드 인/아웃 효과 🌗
- AI 행동 패턴 설계 🤖
- 퀘스트 진행 타이머 구현 ⏱️
이처럼 유니티 코루틴을 활용하면 시간 기반 작업을 훨씬 간단하고 직관적으로 구현할 수 있습니다.
728x90