はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UnityでJsonをWebサーバーから読み取る

はじめに

今回はUnityでJsonをWebサーバーから読み取ることについての記事になります!

前回はJsonの使い方からローカルに保存したJsonを読み込みをしました。

www.hanachiru-blog.com

一応前回の続きという流れでいきたいと思います。

利点

なぜローカルに保存せずにWebサーバからJsonを取得するのでしょうか。

私が思う利点はこの2つだと思います。

・アプリ(ゲーム)のアップデートをしなくても中身を更新できる

・アプリ(ゲーム)の容量を減らせる

ただネット環境が必要になるといったデメリットもあります。

myjsonという無料サービス

ただ私はWebサーバー関連の知識は全くありません。
たぶん実際のアプリではマズイのかもしれませんが、jsonを返してくれる無料のWebサービス”myjson”を使うことで簡単に実現できます。

myjson.com

今回は練習ということで、こちらを利用させていただこうと思います。

myjsonにJsonを置く

実際にこちらのサービスを利用していきたいと思います。

前回利用したJsonを今回も使っていきましょう。

{
 "userInfos" : [
    { "id" : 1, "name" : "hanachiru", "tel" : { "homePhone" : "XXX-XXX-XXX", "mobilePhone" : "YYY-YYY-YYY"} },
    { "id" : 2, "name" : "Mr.X", "tel" : { "homePhone" : "XXX-XXX-XXX", "mobilePhone" : "YYY-YYY-YYY"} },
    { "id" : 3, "name" : "Ms.Y", "tel" : { "homePhone" : "XXX-XXX-XXX", "mobilePhone" : "YYY-YYY-YYY"} }
   ] 
}

f:id:hanaaaaaachiru:20190424231040p:plain

Unityのコードを少し変更する

前回のコードを少し変えちゃいましょう。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class JsonData
{
    public UserInfo[] userInfos;
}
[System.Serializable]
public class UserInfo
{
    public int id;
    public string name;
    public TelephoneNumber tel;
}

[System.Serializable]
public class TelephoneNumber
{
    public string homePhone;
    public string mobilePhone;
}

public class JsonReader : MonoBehaviour
{
    private string path = "https://------------------------";

    IEnumerator Start()
    {

        // サーバからJSON取得
        using (WWW www = new WWW(path))
        {

            //Jsonを取得するまで待機
            yield return www;

            //エラーの場合
            if (!string.IsNullOrEmpty(www.error))
            {

                Debug.LogError("www Error:" + www.error);
                yield break;

            }

            //JsonData型のインスタンスを作成
            JsonData jsonData = new JsonData();

            //jsonのデータをjsonDataに格納
            JsonUtility.FromJsonOverwrite(www.text, jsonData);

            //出力
            foreach (var item in jsonData.userInfos)
            {
                Debug.Log("id: " + item.id);
                Debug.Log("name: " + item.name);
                Debug.Log("homePhone: " + item.tel.homePhone);
                Debug.Log("mobilePhone: " + item.tel.mobilePhone);
            }

        }

    }
}

f:id:hanaaaaaachiru:20190424231307p:plain

さいごに

あまりにWebサーバーに関する知識がなく、かなり苦戦してしましました。
最初はDropboxの無料粋でも同様なことができると思っていたのですが、どうやら無理?っぽいみたいでかなり時間がかかってしまいました。

データをWeb上で管理はなかなかに一筋縄ではいかないみたいです。

www.hanachiru-blog.com