Unity

코루틴 콜백 받기

lipnus 2018. 10. 28. 18:42
반응형
using UnityEngine;
using System.Collections;
 
public class Test : MonoBehaviour {
 
    // Use this for initialization
    IEnumerator Start () {
 
        //for Lambda
        StartCoroutine(ReturnValue( (x) =>
        {
            Debug.Log(x);
        }
        ));
 
         //for local value
        int a = 0;
        yield return StartCoroutine(ReturnValue( (x) =>
        {
            a = x;
        }
        ));
        Debug.Log(a);
    }
  
    IEnumerator ReturnValue(System.Action<int> callback)
    {
        yield return null;
        callback(10);
    }
}





*네트워크에 위의 개념을 사용

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

public class ConnectServer : MonoBehaviour {

string url;
private MusicInfo musicInfo;


void Start() {

quiz_1(0,0);
}

void quiz_1(int genre, int order) {
WWWForm form = new WWWForm();
form.AddField("genre", "0");
form.AddField("order", "0");

//코루틴으로 서버에 접속하고 완료 시, 콜백으로 받아온다
StartCoroutine(postToServer(form, "/quiz_1", (www) => {
musicInfo = JsonUtility.FromJson<MusicInfo>(www.downloadHandler.text);
Debug.Log("콜백: " + musicInfo.title);
}
));
}

//서버로 데이터를 post하는 코루틴
IEnumerator postToServer(WWWForm form, string path, Action<UnityWebRequest> callback) {

UnityWebRequest www = UnityWebRequest.Post(GlobalScript.serverPath + path, form);
yield return www.SendWebRequest();

if(www.isNetworkError || www.isHttpError) {
Debug.Log("[Error]:" + www.error);
}else {
Debug.Log("Form upload complete!");
}

callback(www);
}


}


반응형

'Unity' 카테고리의 다른 글

음악 중간부터 재생  (0) 2019.04.28
UI Image의 크기조정  (0) 2018.10.29
서버로 Post 보내기  (0) 2018.10.27
텍스트 타이핑 효과  (0) 2018.10.21
자식객체 검색  (0) 2018.10.16