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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.