07 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 09

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】テキストファイル読み込み? 

明日はあったかくなるようですね。
今日は雨が降るとか雪が降るとか言ってました。
いきなりの温度変化で風邪ひきやすくなりそうですね!みなさんお気をつけて!

以前髪の毛ピンクにしたって言いましたけど、色が落ちて茶色になりました。
短い期間でしたということで、毎度おなじみ月曜の坂内です。

ええと、テキストファイルなんかをUnityで使おうとしてたら嵌りました。
そこの対処法なんぞを、簡単に書いてみようかと思います。
え?テキストファイルなんか使わない?まぁまぁ そういわずに・・・

適当にAssetのフォルダの中に「Document」フォルダを作り、そこに「test.txt」を
置き、以下のようなコードを書いたところ・・・・


public class Test : MonoBehaviour {
public UILabel label;

void Start(){
string txtBuffer = "";
string textFileName = "test.txt";
string description = "";
string path = Application.dataPath + "/Document/" + textFileName;
FileStream file = new FileStream(path,FileMode.Open,FileAccess.Read);
StreamReader reader = new StreamReader(file);
while((txtBuffer = reader.ReadLine()) != null){
description = description + txtBuffer + "\r\n";
}
label.text = description;
}
}


普通に動くジャマイカ!

なーんだと思っていたとこ、Androidにいれたら動かない!!

いやー 嵌りました!

エラーを見るとこんなのが出てます。

IsolatedStorageException: Could not find a part of the path "/data/app/test.company-1.apk/Document/test.txt".

で、調べたところ、以下のようなことが書いてました。

で、streamingAssetsを使うことに?。
これはAssetsの直下に「StreamingAssets」というフォルダを置いて、ここいテキストファイルを配置します。
公式ではStreamingAssetsについて、以下のように書かれています。

「Unityプロジェクトにおける StreamingAssets と呼ばれるフォルダに配置したファイルはターゲットとするプラットフォームの特定のフォルダにそのまま保持されます。フォルダ名は Application.streamingAssetsPath プロパティを取得することが出来ます。参考のため、プラットフォームにより、このファイルのパスは異なります:」
詳細はこちら http://docs-jp.unity3d.com/Documentation/Manual/StreamingAssets.html

で、AndroidはWWWクラスを使えと。


using UnityEngine;
using System.Collections;
using System.IO;

public class Test : MonoBehaviour {
public UILabel label;
TextReader txtReader;
string description;

void Start(){
StartCoroutine("LoadText");
}

IEnumerator LoadText(){
string txtBuffer = "";
string textFileName = "test.txt";
string path = "";
#if UNITY_EDITOR
path = Application.streamingAssetsPath + "\\" + textFileName;
FileStream file = new FileStream(path,FileMode.Open,FileAccess.Read);
txtReader = new StreamReader(file);
yield return new WaitForSeconds(0f);
#elif UNITY_ANDROID
path = "jar:file://" + Application.dataPath + "!/assets" + "/" + textFileName;
WWW www = new WWW(path);
yield return www;
txtReader = new StringReader(www.text);
#endif
while((txtBuffer = txtReader.ReadLine()) != null){
description = description + txtBuffer + "\r\n";
}
label.text = description;
}
}


一応これで、PCでの起動はOKです。

ではAndroidで実行してみましょう・・

うごいた!!

ってことで、WWWを使うらしいです。

んで、その場合、yieldを使って、WWWでの取得を確認した後じゃないと、動かないので
こんな感じのコードになるのかなーと。

まぁ動くまで色々悩んで1日すぎちゃったのは過去のこと!

一応以上ですが、え?もっと簡単な方法あるよー!って情報持ってる方いましたら、
コメントなんぞで教えてくれると、泣いて喜びます!

アデュー!
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/78-ccba54a3
この記事にトラックバックする(FC2ブログユーザー)