유니티에서의 코루틴

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

LightshipAR SDK 활용하기 - Maps SDK의 활용
LightshipAR SDK 활용하기 - Maps SDK의 활용

ARDK Maps SDK

Lightship의 geofencing 기능을 구현할 수 있는 Maps SDK 활용법을 알아봅니다.

콘텐츠 개발

프로젝트 세팅

본 포스팅은 ARDK 3.9 버전, Maps SDK 0.4 버전을 기준으로 작성합니다. 이전 포스팅을 참조하여 SDK를 임포트 합니다.

Top Down Map

  1. 네이버 지도같은 일반적인 탑-다운 맵을 구현해 봅니다.

Unity3D에서의 UI - Rect Transform
Unity3D에서의 UI - Rect Transform

Unity UI RectTransform :: 개요

UI 객체들의 위치, 크기, 기준점 등등을 담당하는 Rect Transform에 대하여 알아봅니다.

Unity3D에서의 UI - UI의 구성
Unity3D에서의 UI - UI의 구성

Unity UI :: 개요

Unity UI는 게임 및 애플리케이션용 사용자 인터페이스를 개발하는 데 쓰이는 간단한 UI 툴킷입니다. Unity UI는 게임 오브젝트 기반 UI 시스템으로, 컴포넌트와 게임 뷰를 사용하여 사용자 인터페이스를 배열하고 위치와 스타일을 지정합니다. Unity UI는 Unity 에디터 내 사용자 인터페이스에 대해 사용할 수 없습니다.https://docs.unity3d.com/kr/2019.1/Manual/UIToolkits.html