유니티에서의 코루틴

Published: Apr 24, 2022 by BeatChoi

유니티에서의 코루틴

단일 스레드를 활용하여 Update을 기반으로 프레임 단위의 실행을 하는 유니티에서 멀티태스킹의 효과를 내기위해 활용합니다.
Update와는 별개로 다른 작업을 기다리거나 시스템을 양보하는 방식으로 구현됩니다.

스크립트 작성 :: 코루틴의 선언 및 호출

간단한 코루틴의 구조를 알아봅니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coroutine01 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(CoSample()); 
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator CoSample()
    {
        Debug.Log("1");
        yield return new WaitForSeconds(3);
        Debug.Log("2");
    }
}

19 : 코루틴은 IEnumerator(열거자)를 반환값으로 가지며 이는 아래 설명할 yield문을 만날 시 해당 위치를 저장하는 역할을 하고 그 다음 호출시 해당 위치를 호출합니다.
21 : 로그창에 1 찍음.
22 : yield문으로 이 경우엔 WaitForSeconds(float)float의 시간만큼 대기하는 역할을 합니다. 위에서 설명한 대로 3초 대기 후 해당위치에서 다시 코루틴이 호출됩니다.
23 : 3초 후 2를 찍음.
10 : StartCoroutine메소드로 코루틴을 호출합니다. 코루틴의 실행이 완료될 때 까지 반복적으로 호출이 됩니다.

유니티3D 에서

해당 스크립트를 계층구조창의 오브젝트에 인스턴스화 시키고 상단 플레이 버튼을 눌러 콘솔창을 확인합니다.

로그에 1이 찍히고 난 뒤 3초 후 2가 찍히는 것을 확인할 수 있습니다.

중간 정리

코루틴은 열거자인 IEnumerator를 반환하는 함수로 선언이 되고 해당 코루틴은 StartCoroutine을 통해 호출이 됩니다.
코루틴이 호출이 되어 실행 중 yield문을 만나게 되면 해당 위치를 저장하고 시스템을 양보합니다.
양보가 끝나면 해당 코루틴이 다시 호출되는데 이 때 yield문이 호출된 위치에서 다시 시작하게 됩니다.

Latest Posts

Unity3D DOTS 개요 - DOTS 알아보기 2. World에 Entity 만들기
Unity3D DOTS 개요 - DOTS 알아보기 2. World에 Entity 만들기

Unity3D DOTS 개요 - DOTS 알아보기 1. ECS
Unity3D DOTS 개요 - DOTS 알아보기 1. ECS

DOTS 개요

DOTS는 Data Oriented Tech Stack의 약자로서 기본 상태에서 최적의 성능을 확보할 수 있는 전혀 다른 방식의 코드 작성 방법입니다. DOTS 방식으로 코드를 짠다면 멀티스레드 성능을 통해 더 많은 개체, 더 많은 이펙트, 더 나은 비주얼을 가진 복잡한 콘텐츠를 만들 수 있습니다.
DOTS는 Entity Component System, C# Job System, Burst Compiler 세 가지 요소로 이루어져 있습니다. 본 포스팅에서는 ECS에 대해서 알아봅니다.

유니티3D 설치
유니티3D 설치

유니티3D를 설치해봅니다.