공부/Unity

[Unity] 코루틴(Coroutine)이란?

돌멩이수프 2022. 5. 3. 11:50
728x90

게임 플레이어가 스킬을 사용하는데, 그 스킬이 3초 후에 자동으로 꺼지는 스킬이라고 해보자.

평소에 알던 내용으로 이 스킬을 구현하려면 Update문에 스킬을 넣고, 매 프레임마다 스킬을 검사해서 3초라는 시간이 지난 것을 판단하고 그 후에 스킬을 꺼주어야 한다. 3초가 지난 것을 알기 위해 Update문을 사용한다는 것은 쓸데없는 반복이 나오는 매우 비효율적인 방법이다.

이럴 때 사용할 수 있는 것이 코루틴(Coroutine)이다. 코루틴(Coroutine)을 사용하면 내가 원하는 시기에 필요한 횟수만큼만 함수를 실행시킬 수 있으니 불필요한 행동을 하지 않게 된다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoroutineTest : MonoBehaviour
{
    Coroutine co;

    void Start()
    {
        co = StartCoroutine("StartSkill", 4.0f);
        StartCoroutine("StopSkill", 2.0f);
    }

    IEnumerator StartSkill(float time)
    {
        Debug.Log("Skill Start");
        yield return new WaitForSeconds(time);
        Debug.Log("Skill End");
        co = null;
    }

    IEnumerator StopSkill(float time)
    {
        Debug.Log("Stop Skill Start");
        yield return new WaitForSeconds(time);
        Debug.Log("Stop Skill");
        if (co != null)
        {
            StopCoroutine(co);
            co = null;
        }
    }
}

 

StartCoroutine("StopSkill", 2.0f); 을 주석처리 해놓고 유니티를 재생하면

콘솔 창에 스킬이 정상적으로 시작하고 4초 후에는 정상적으로 꺼지는 모습을 볼 수 있다. 주석을 해체하고 실행하면

Stop Skill이 Skill을 방해해서 Skill이 시작만 하고 사라지는 모습을 볼 수 있다. Stop Skill은 시작과 마무리 모두 정상이다.

728x90