본문 바로가기
프론트엔드

코루틴

by 느바 2022. 10. 9.
반응형

코루틴 

코루틴은 시간의 경과에 따른 절차적 단계를 수행하는 로직을 구현하는 데 사용되는 함수이다.

코루틴은 HTTP 전송, 에셋 로드, 파일 I/O 완료 등을 기다리는 것과 같이 긴 비동기 작업을 처리해야 하는 경우 코루틴을 사용하는 것이 가장 좋다.

 

1. 실행시간의 처음과 끝이 존재할 때

예제 : 키패드 1을 눌렀을 때 5초간 실행

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

public class Test : MonoBehaviour
{
    [SerializeField] float value05;
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Keypad1))
        {
            StartCoroutine(MyCo());
        }
        
    }

    IEnumerator MyCo()
    {
        while(true)
        {
            value05 += Time.deltaTime;
            if(value05 >= 5f)
            {
                value05 = 5f;
                break;
            }                
            print(value05);
            yield return null;
        }
    }
}

2.일정 간격마다 돌려야 할 때

예제 : 키패드 1을 눌렀을 때 1초마다 실행

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

public class Utils
{
    public static readonly WaitForSeconds delay1 = new WaitForSeconds(1f);
}
public class Test : MonoBehaviour
{
    int value01 = 0;
    readonly WaitForSeconds delay1 = new WaitForSeconds(1f);
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Keypad1))
        {
            StartCoroutine(MyCo());
        }        
    }

    IEnumerator MyCo()
    {
        while(true)
        {                            
            print($"{value01++}초");
            //yield return delay1;
            yield return Utils.delay1;
        }
    }
}

3. http 통신

예제 : 네오플 던전앤파이터 서버 정보 가져오기

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

public class NetworkTest : MonoBehaviour
{
    string apikey = "";

    void Start()
    {
        StartCoroutine(UnityWebRequestGet());
    }

    IEnumerator UnityWebRequestGet()
    {        
        string url = $"https://api.neople.co.kr/df/servers?apikey={apikey}";

        UnityWebRequest www = UnityWebRequest.Get(url);

        yield return www.SendWebRequest();

        if(www.error == null)
        {
            Debug.Log(www.downloadHandler.text);
        }
        else
        {
            Debug.Log("ERROR");
        }
    }
}

 

 

 

[출처]

https://docs.unity3d.com/kr/2021.3/Manual/Coroutines.html

 

코루틴 - Unity 매뉴얼

코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니

docs.unity3d.com

https://www.youtube.com/watch?v=OOu18DNx_n8 

https://www.youtube.com/watch?v=GxCf1SsLVB4 

 

반응형

'프론트엔드' 카테고리의 다른 글

Action 으로 다른 스크립트 함수 가져오는 방법  (0) 2022.10.10
Unity에서 Json을 사용하는 방법  (0) 2022.10.09
TextMeshPro 텍스트 변경 및 한글폰트 설정  (0) 2022.10.02
3D 속성  (0) 2022.08.18
구글링  (0) 2022.03.22