はらけんログ

unity触ったりバイクに乗ったり

【Unity】StreamingAssetsに格納したファイルから文字列とかを取得する

 

はい。

拙者、もう少しわかりやすく内容を書きたいなと思っているでござる。

 

っていうのも今回つまずいたところは公式リファレンスの書き方が間違っていて、動作しなかったから。

 

ちゃんと動かせるソースを教えろよな(超上から目線)

 

ってか他のブログとかでも var とか使ってる奴のコードわかりにくいでしょ?

そんなかんじのわかりにくいコードを書かないように頑張りたい。

 

んで、今日はstreamingAssetsに入れたメモ帳などから文字列を取得する方法です。

リファレンスだと

public class ExampleClass : MonoBehaviour {
    public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
    public string result = "";
    IEnumerator Example() {
        if (filePath.Contains("://")) {
            WWW www = new WWW(filePath);
            yield return www;
            result = www.text;
        } else
            result = System.IO.File.ReadAllText(filePath);
    }
}

 ってなってる。(コピペです)

 

で、実行すると

get_streamingAssetsPath is not allowed to be called during serialization, call it from Awake or Start instead.・・・

みたいなエラーが返ってきて動かない。(動くには動くけど取得は出来ない)

 

で、これのいけないところは

public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

 ってところ。

 

 これを

public string filePath ;

void Start()

{

filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

}

 ってな感じにしてやると動く。

 

つまり、「宣言ついでに定義するな。StartとかAwakeでやれ。」っていうエラーなんです。(Google先生にエラー翻訳してもらえば一発)

 

 

それでも動かねぇっていう人はファイルネームを確認してください。(赤文字の部分)

System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

 

これ、実は拡張子も入れないとダメっぽい

 

だから、取得するファイルがテキストファイルだった場合、本当は

System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile.txt");

 

 っていれなきゃならん。

 

こんなんで時間食わせないでよUnityさん。