Blockchain code Metaverse VR

Unity×VR×Blockchain(215)

スポンサーリンク

//tips

//unityとjsonserverの連動確認

unityでhttp://localhost:3000からデータを取得・POSTする方法を考える。

http://localhost:3000で取得するとhtmlの表記が多くなってしまったので純粋なjson形式を含むhttp://localhost:3000/articlesの方で処理を実行した。

下記がスクリプト。

using System.Collections;
using UnityEngine;
//これが必要になります
using UnityEngine.Networking;

public class APIWEB : MonoBehaviour
{

string webURL = "http://localhost:3000/articles";

public void Start()
{
//通信はコルーチンを使って行います。
StartCoroutine(GetData());
}

IEnumerator GetData()
{

UnityWebRequest request = UnityWebRequest.Get(webURL);
yield return request.SendWebRequest();

//エラー処理
if (request.isNetworkError)
{
Debug.Log(request.error);
}
else
{
//リクエストが成功した時
if (request.responseCode == 200)
{
string jsonText = request.downloadHandler.text;

//JSONがunicodeで、仮名がエスケープされてしまうため、エスケープされた文字を変換
jsonText = System.Text.RegularExpressions.Regex.Unescape(jsonText);
Debug.Log(jsonText);
}
}
}
}

コンソールに下記の内容が表示された。

[
{
"id": 1,
"title": "json-server",
"author": "typicode"
},
{
"id": 2,
"title": "faker.js",
"author": "Marak"
}
]
UnityEngine.Debug:Log(Object)
<GetData>d__2:MoveNext() (at Assets/APIWEB.cs:37)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)

GETの方は無事にできたのでPOSTの方を見ていく。

"myField", "myData”を追加してみる。

下記スクリプトで実行。

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

public class APIPOST : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}

IEnumerator Upload()
{
WWWForm form = new WWWForm();
form.AddField("myField", "myData");

using (UnityWebRequest www = UnityWebRequest.Post("http://localhost:3000/articles", form))
{
yield return www.SendWebRequest();

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

http://localhost:3000/articlesページを確認すると下記のようにアップロードできていた。

[
{
"id": 1,
"title": "json-server",
"author": "typicode"
},
{
"id": 2,
"title": "faker.js",
"author": "Marak"
},
{
"myField": "myData",
"id": 3
}
]

ただ、このid3部分をdelteする方法を探していたところ、articles/~で消したい部分を指定できることに気づいたので下記のように処理してみた。

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

public class APIDELETE : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}

IEnumerator Upload()
{

using (UnityWebRequest www = UnityWebRequest.Delete("http://localhost:3000/articles/3"))
{
yield return www.SendWebRequest();

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

これできちんとid3の部分が削除された。

同様にPUTでid3の内容変更ができないか試してみる。

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

public class APIPUT : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}

IEnumerator Upload()
{
byte[] myData = System.Text.Encoding.UTF8.GetBytes("This is some test data");

using (UnityWebRequest www = UnityWebRequest.Put("http://localhost:3000/articles/3", myData))
{
yield return www.SendWebRequest();

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

これで試したが"This is some test data”は表示されずid3以下が空になるだけで終わってしまった。

再度POSTを行い、下記のように戻した。

[
{
"id": 1,
"title": "json-server",
"author": "typicode"
},
{
"id": 2,
"title": "faker.js",
"author": "Marak"
},
{
"myField": "myData",
"id": 3
}
]

同様の問題の解決策としてjsonformatの認識のされ方だという指摘を見つけたのでそちらを参考にコードを変更。

https://stackoverflow.com/questions/37513244/unity-3d-puts-deletes-http-methods

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

public class APIPUT : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}

IEnumerator Upload()
{
UnityWebRequest www = UnityWebRequest.Put("http://localhost:3000/articles/3", "{\"name\":\"user_01\",\"address\":{\"raw\":\"MountFiji\"}}");
www.SetRequestHeader("Content-Type", "application/json");

yield return www.SendWebRequest();

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

Stringを認識させるためのスラッシュが必要とのことだったので追加した。

こちらを実行するとid3部分がきちんと更新され、下記のような表示となった。

[
{
"id": 1,
"title": "json-server",
"author": "typicode"
},
{
"id": 2,
"title": "faker.js",
"author": "Marak"
},
{
"name": "user_01",
"address": {
"raw": "MountFiji"
},
"id": 3
}
]

きちんとunityからjsonの内容を変更できた。

次のステップとしてはこの変更したjsonの内容を加工して、htmlで見せたい表示にする。

JavaScriptでJSONファイルを読み込んでいく流れになるか。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.