脳汁portal

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

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