Unity/Csharp/Request
提供: 初心者エンジニアの簡易メモ
Httpリクエストサンプル
以下delegateを使ったhttpリクエストサンプルコード WebHttpRequest.cs
using System.Collections; using UnityEngine; using UnityEngine.Networking; public class WebHttpRequest : MonoBehaviour { string text = ""; public bool errorFlag = false; public enum ResponseType { Success, Faild, NetworkError } public delegate void CustomCallback(ResponseType responseType); private CustomCallback callbacks; public void addCallback(CustomCallback callback) { callbacks += callback; } public void Exec (string url) { text = ""; errorFlag = false; StartCoroutine(Get (url)); } public IEnumerator Get (string url) { var request = new UnityWebRequest(); request.downloadHandler = new DownloadHandlerBuffer(); request.url = url; request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8"); request.method = UnityWebRequest.kHttpVerbGET; yield return request.Send(); if (request.isNetworkError) { errorFlag = true; callbacks(ResponseType.NetworkError); } else { if (request.responseCode == 200) { text = request.downloadHandler.text; callbacks(ResponseType.Success); } else { errorFlag = true; callbacks(ResponseType.Faild); } } } public string GetBody() { return text; } public void Reset() { text = ""; errorFlag = false; } }
呼び出し元 NewBehaviourScript.cs
public class NewBehaviourScript : MonoBehaviour { WebHttpRequest request; // http送信 void Start () { const string uri = "http://raw.githubusercontent.com/nlohmann/json/develop/test/data/json.org/1.json"; string param1 = "value1"; param1 = WWW.EscapeURL(param1); string query = "?hoge=" + param1; string url = uri + query; GameObject gameObj = new GameObject(); request = gameObj.AddComponent<WebHttpRequest>(); request.Exec(url); request.addCallback(OnResponse); Debug.Log("request=" + url); } // httpのresponse受信 public void OnResponse(WebHttpRequest.ResponseType responseType) { Debug.Log("onResponse=" + responseType); if (request) { if (responseType.Equals(WebHttpRequest.ResponseType.Success)) { Debug.Log("body=" + request.GetBody()); } else if (responseType.Equals(WebHttpRequest.ResponseType.Faild)) { Debug.Log("errorFlag=" + request.errorFlag); } else if (responseType.Equals(WebHttpRequest.ResponseType.NetworkError)) { Debug.Log("NetworkError" + request.errorFlag); } request.Reset(); } } }
Httpリクエストサンプル(これはDelegateを使ってないダメな例)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Collections; using UnityEngine.Networking; public class WebHttpRequest : MonoBehaviour { string text = ""; public bool errorFlag = false; public void Exec (string url) { text = ""; errorFlag = false; StartCoroutine(Get (url)); } public IEnumerator Get (string url) { var request = new UnityWebRequest(); request.downloadHandler = new DownloadHandlerBuffer(); request.url = url; request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8"); request.method = UnityWebRequest.kHttpVerbGET; yield return request.Send(); if (request.isError) { Debug.Log(request.error); } else { if (request.responseCode == 200) { text = request.downloadHandler.text; Debug.Log(request.downloadHandler.text); } } } public string GetBody() { return text; } public void Reset() { text = ""; errorFlag = false; } }
呼び出し側
const string uri = "ttp://hogehoge.com/api?param1="; string param1 = "value1"; param1 = WWW.EscapeURL (param1); string url = uri + param1; GameObject gameObj = new GameObject(); WebHttpRequest request = gameObj.AddComponent<WebHttpRequest>(); request.Exec (url);
呼び出し側で受信チェック
void Update () { if (request) { if (!request.GetBody ().Equals ("")) { // 処理 request.Reset (); } else if (request.errorFlag) { request.errorFlag = false; } } }