「Unity/Csharp/Request」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→Httpリクエストサンプル) |
|||
行17: | 行17: | ||
public delegate void CustomCallback(ResponseType responseType); | public delegate void CustomCallback(ResponseType responseType); | ||
private CustomCallback callbacks; | private CustomCallback callbacks; | ||
− | public void | + | public void AddCallback(CustomCallback callback) |
{ | { | ||
callbacks += callback; | callbacks += callback; | ||
行79: | 行79: | ||
GameObject gameObj = new GameObject(); | GameObject gameObj = new GameObject(); | ||
request = gameObj.AddComponent<WebHttpRequest>(); | request = gameObj.AddComponent<WebHttpRequest>(); | ||
− | request. | + | request.AddCallback(OnResponse); |
request.Exec(url); | request.Exec(url); | ||
Debug.Log("request=" + url); | Debug.Log("request=" + url); |
2018年11月15日 (木) 01:27時点における版
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; if (callbacks != null) { callbacks(ResponseType.NetworkError); } } else { if (request.responseCode == 200) { text = request.downloadHandler.text; if (callbacks != null) { callbacks(ResponseType.Success); } } else { errorFlag = true; if (callbacks != null) { 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.AddCallback(OnResponse); request.Exec(url); 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; } } }