「Unity/Csharp/Request」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→Httpリクエストサンプル) |
(→Httpリクエストサンプル) |
||
行1: | 行1: | ||
==Httpリクエストサンプル== | ==Httpリクエストサンプル== | ||
+ | 以下delegateを使ったhttpリクエストサンプルコード | ||
+ | WebHttpRequest.cs | ||
+ | <pre> | ||
+ | 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; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | 呼び出し元 | ||
+ | NewBehaviourScript.cs | ||
+ | <pre> | ||
+ | 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(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | ==Httpリクエストサンプル(これはDelegateを使ってないダメな例)== | ||
using System.Collections; | using System.Collections; | ||
using System.Collections.Generic; | using System.Collections.Generic; |
2018年11月15日 (木) 00:30時点における版
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; } } }