はじめに
今回はJson
とはなにかから、UnityでJsonを読み込むまでについての記事になります!
Json
と聞いてなんとなく知っているけれど、使ったことがないという人も多いのではないでしょうか。
かくいう私が少し前までそうだったのですが、データの管理方法の一つとしてJson
は非常に適しています。
例えば、WebサーバーにJsonのデータを置くことで、ゲーム内にセリフなどの情報を書かなくとも読み込むことなども可能になります。
Jsonを勉強する準備
Jsonを自分で書くにあたってネット上の便利なサービスがあります。
このJsoneditor online
は非常に分かりやすく、自分で書いたコードをダウンロードしたりすることもできます。
またオンライン上で使えるので、勉強には最適といえるでしょう。
Jsonの概要
Jsonの構造はとてもシンプルなので、すぐに覚えられると思います。Jsonの基本構造はこの2つです。
・key(名前)/value(値)のペアの集まり(連想配列のイメージ)
・値の順序付きリスト(配列のイメージ)
ひとつずつみていきましょう。
key(名前)/value(値)のペアの集まり
さきほどのJsoneditor online
に以下のコードを打ち込んでみましょう。
{ "id" : 1, "name" : "hanachiru", "isHuman" : true}
これは、
・id
というkeyに1
という数値
・name
というkeyにhanachiru
という文字列
・isHuman
というkeyにtrue
という真偽値
を関連付けている、という意味になります。
値の順序付きリスト
{ "UserInfo" : [ { "id" : 1, "name" : "hanachiru", "isHuman" : true }, { "id" : 2, "name" : "slime", "isHuman" : false }, { "id" : 3, "name" : "momonja", "isHuman" : false } ] }
このように[]
で囲うことで配列を作ることができます。
以上のたった2つのルールだけで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"} } ] }
このjson
を実際にUnityで使ってみたいと思うので、こちらのjson
を作成、ダウンロードしちゃいましょう。
jsonをダウンロード
さきほど書いたjson
をダウンロードしてUnityで使ってみましょう。
右上にあるSave
のSave to disk
をクリックすれば、ダウンロードすることができます。
ダウンロードしたJson
をUnityへインポートすると、以下のようなアイコンがでるはずです。
これを今回はローカルから動的に参照するために、Resources
フォルダを作成し、そこにjson
を入れます。
データ取得用のクラスを作る
まずはJson形式で保存したい変数をもったクラスを作成する必要があります。
さきほどのサンプルに対応したクラスを作成してみました。
JsonReader.cs
using UnityEngine; [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; }
ファイルの読み取り
JsonUtility
を使うことで簡単にJson
を読み取ることができます。
JsonReader.cs
using UnityEngine; [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 void Start() { //Resourcesからdocument.jsonを読み込み、string型にキャスト string json = Resources.Load<TextAsset>("document").ToString(); //JsonData型のインスタンスを作成 JsonData jsonData = new JsonData(); //jsonのデータをjsonDataに格納 JsonUtility.FromJsonOverwrite(json, 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); } } }
このようにしてJson
を読み込むことができます。
ただ一番気を付けなければならないことは、Jsonでのkey名とそれに対応した変数名を一致させなければならないことです。
私はこれでかなりの時間悩んでしましました。
さいごに
これでJson
の作成方法から、実際にUnityでJson
を使うところまではできました。
次はネット上にJson
を置き、ゲームでそれを読み込む方法について書いてみたいと思います!