[Unity]AndroidでStreamingAssets内のjsonを使う

ゲームで使うデータ(敵のステータスだったり)をjsonで保存して使っているのですが、Android実機で使うときにいろいろ詰まったのでメモ。

データの配置

Assetsフォルダの中にStreamingAssetsフォルダを作成し、その中にデータを配置します。
StreamingAssetsフォルダ内のファイルは、アプリケーションと一緒にビルドされます。

Unity - マニュアル: ストリーミングアセット

データのロード

StreamingAssets内のファイルへのパスは、

var path = Application.streamingAssetsPath + "/" + localpath;


で作成します。

データの読み込みには、WWWクラスを使用します。

www.textで読み込んだデータのテキストが取得できますが、これをそのままJsonUtility.FromJson<>()に渡すとエラーが起きます。
これはBOMが付与されているのが原因で、先頭3byteを飛ばしてからデシリアライズを行います。


WWW www_load = new WWW( filepath );
while (!www_load.isDone);

byte[] savebytes = www_load.bytes;
var encode = new System.Text.UTF8Encoding(false);
string savejson = encode.GetString( savebytes, 3, savebytes.Length - 3 ); // BOMを無視する

var data = JsonUtility.FromJson<Data>(savejson);


こんな感じのコードを使っています。
エディタ上だと、WWWクラスに渡すパスの先頭に"file:///"が必要なので、Application.platformで場合分けして付与します。

Unityで作成したAndroidアプリでファイルをxml形式で読み書きする - Qiita

Unity - スクリプトリファレンス: WWW
スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimumu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
このページのトップへ