脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

PlayerPrefsとStreamingAssetsにおけるファイルの扱いの違い

Player Prefs StreamingAssets
Windows Android Windows Android
バイス上で保存される場所 システムレジストリ ShaderPreferences コンパイルしたアプリのDataディレクト -
ファイル内容の修正に関して regeditで編集可能 通常不可 テキストエディタで編集可能 通常不可
アプリ初回起動時のファイルの扱い あらかじめ作成しておくことは出来ない(初回起動時にはじめて作成される) あらかじめ作成しておくことが可能
- - WriteもReadも可能 Readのみ可能(編集したい場合は初回起動時にPersistentDataディレクトリにコピーし、二回目以降はそちらを利用する方法がメジャー)
特徴 セーブデータの保存などに利用される StreamingAssets以下に配置されたファイルはアプリのコンパイル時に圧縮されない

Android端末で初回起動時にStreamingAssetsからPersistentDataディレクトリにデータをコピーする方法

UnityでStreamingAssetsに配置したファイルはアプリコンパイル時にも圧縮されないため、必要な情報の保存に利用できる。
しかしこのStreamingAssetsはアプリ内にStreamingAssetsという名前のディレクトリが作成されるわけではなく、いわゆるシムリンク的なもので、デバイス毎にどこに保存されるかは異なる。
その中でもAndroidの場合が少し曲者で、AndroidのStreamingAssets上のファイルはReadはできるがWriteができない。
なので通常は初回起動時にStreamingAssetsからPersistentDataディレクトリへファイルをコピーし、二回目以降はそちらを読み書きして使う方法がメジャーとなっている。

void Start(){
    if (!File.Exists (Application.persistentDataPath + "/" + filename)) {
        FileCopyFromStreamingToPersistent();
    }
}
  • 目的のファイルがpersistentDataディレクトリにない場合は初回起動とみなしてファイルをコピーする
void FileCopyFromStreamingToPersistent(){
	string path = Application.streamingAssetsPath + "/" + filename;
	WWW www = new WWW (path);
	while (!www.isDone) {
	}
	string toPath = Application.persistentDataPath + "/" + filename;
	File.WriteAllBytes (toPath, www.bytes);
}
  • 実際にコピーをするメソッドはこちら