728x90
코루틴
코루틴은 시간의 경과에 따른 절차적 단계를 수행하는 로직을 구현하는 데 사용되는 함수이다.
코루틴은 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
https://www.youtube.com/watch?v=OOu18DNx_n8
https://www.youtube.com/watch?v=GxCf1SsLVB4
728x90
'3D > Unity' 카테고리의 다른 글
Unity ColorUtility (0) | 2022.10.11 |
---|---|
Unity Array List Dictionary (0) | 2022.10.10 |
Action 으로 다른 스크립트 함수 가져오는 방법 (0) | 2022.10.10 |
Unity에서 Json을 사용하는 방법 (0) | 2022.10.09 |
TextMeshPro 텍스트 변경 및 한글폰트 설정 (0) | 2022.10.02 |