【Unity】WWWクラスを利用して、JSONを読み込む

  • |
【Unity】WWWクラスを利用して、JSONを読み込む
   

今回はUnityの通信の話です。外部にある「JSON」を読み込んで表示をする方法を紹介します。
通信もJSONも全然知識がないのですが、Unityでは簡単に実装ができます。

WWWクラスを利用して、JSONを読み込む

Unityで通信を実装するには、「WWW」クラスが便利です。
Unity – スクリプティング API: WWW

上記のスクリプトレファレンスに記載があるように簡単なコードで実装ができます。

private string url = "http://hogehoge.com// ******";

IEnumerator Start() {
    WWW www = new WWW(url);
    yield return www;
    
    debug.Log("読み込み完了");
}

コルーチンを使えば、読み込みが終わった時の処理を実装できます。

エラーが出た場合

読み込みに失敗した時には、「www.Error」を利用して判別をします。
if(!string.IsNullOrEmpty(www.error)){

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

}

このようにすれば、エラーが起きた時に処理を止めることができます。

using{}

Usingステートメントを利用すれば、読み込んだリソースを自動的に開放してくれます。
using(WWW www = new WWW(path)){


}

私もまだ良くわかっていないのですが、こちらを参考に。
C# の using ステートメントによる Dispose()

JSONを読み込む

今回は読み込んだのでJSONファイルです。

{
	"message":"こんにちは"
}

JSONを読み込むにはパサーが必要です。
今回は「MiniJSON」を利用しました。
これをUnityのプロジェクトに追加をしてあげれば、JSONを読み込むことができます。

using MiniJSON;

var jsonDict = Json.Deserialize(www.text) as Dictionary<string,object>;
Debug.Log((Sting)jsonDict["message"]);

後は、この取り出した値をUnity内で利用すれば完了です。

【参考】
[Unity] MiniJSON 使って json 読み込み – Qiita

全コード

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

public class wwwTest : MonoBehaviour {

	private string path = "http://************/message.json";

	// Use this for initialization
	 IEnumerator Start () {
	
		using(WWW www = new WWW(path)){

			yield return www;

			if(!string.IsNullOrEmpty(www.error)){

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

			}

			Debug.Log(www.text);
            var jsonDict = Json.Deserialize(www.text) as Dictionary<string,object>;
			Debug.Log(jsonDict["message"]);

			}

			
		}
	}

}


最後に

JSONの構造によって、値を取り出すにはどのようなコードを書けばいいのかが難しかったです。
基本JSONは外部にあるので、これを上手く利用すれば、こちらのタイミングでアプリの内容を書き換えたりすることができるようになります。
すぐに利用目的が見つかりませんが、AssetBundleで利用できるのではないかと考えます。

JavaScript 第6版JavaScript 第6版
David Flanagan,村上 列

オライリージャパン
売り上げランキング : 13810

Amazonで詳しく見る

Related Posts Plugin for WordPress, Blogger...