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초 후 실행됨!"); // 대기 후 실행되는 코드
    }
}

🔍 코루틴의 특징

  1. yield return으로 제어
    • yield return을 사용해 대기하거나, 다른 코루틴/작업을 중단 후 재개할 수 있어요.
    • 예시:
      • yield return new WaitForSeconds(1) 👉 1초 대기
      • yield return null 👉 다음 프레임까지 대기
  2. 병렬 작업 가능
    여러 코루틴을 동시에 실행해 비동기적인 효과를 쉽게 구현할 수 있습니다. 🕒
  3. 중단과 종료
    • 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