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); }
- 実際にコピーをするメソッドはこちら