「Unity/Csharp/Request」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
==Httpリクエストサンプル== | ==Httpリクエストサンプル== | ||
以下delegateを使ったhttpリクエストサンプルコード | 以下delegateを使ったhttpリクエストサンプルコード | ||
WebHttpRequest.cs | -WebHttpRequest.cs | ||
<pre> | <pre> | ||
using System.Collections; | using System.Collections; | ||
| 57行目: | 57行目: | ||
呼び出し元 | 呼び出し元 | ||
NewBehaviourScript.cs | -NewBehaviourScript.cs | ||
<pre> | <pre> | ||
public class NewBehaviourScript : MonoBehaviour { | public class NewBehaviourScript : MonoBehaviour { | ||
| 95行目: | 95行目: | ||
} | } | ||
</pre> | </pre> | ||
==Httpリクエストサンプル(これはDelegateを使ってないダメな例)== | ==Httpリクエストサンプル(これはDelegateを使ってないダメな例)== | ||
using System.Collections; | using System.Collections; | ||
2018年11月14日 (水) 15: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;
}
}
}