テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

StreamingAssetsについて

昨日StreamingAssetsについて書いたので、もうちょっと詳しい話を。

StreamingAssets
http://docs.unity3d.com/Documentation/Manual/StreamingAssets.html

■StreamingAssetsの説明とアクセス方法

StreamingAssetsは簡単に言えば、ファイルをそのままアプリに持っていけるフォルダだ。そこに置いたものは何であれビルド時に余計なエンコードされること無くアプリ内に配置することができる。

ただし、基本的にSystem.IOでしか参照することが出来ないので(一部の環境ではWWWから参照できるらしい)、必然的にResources.Loadなどのメソッドから参照することができない、面倒くさい面を持つ。

とは言え、SQLiteのdbファイルのようなUnityに統合されてないメタデータを読む場合は、どうせSystem.IOで読むのでStreamingAssetsにおいても全く問題ないというわけだ。
読み込む方法はこんな感じ。

filePath = Application.streamingAssetsPath + "/" + fileName;
byte[] b = File.ReadAllBytes(filePath);

■StreamingAssetsのファイルを編集する

また実行環境がモバイル環境の場合、StreamingAssetsに配置したファイルは編集することが出来ない。具体的には編集しようとするとアクセス許可の問題で弾かれてしまう。なので例えばデータベースに追記・削除したい場合は、Application.persistentDataPathのような編集可能なフォルダにファイルをコピーしてから編集すれば良い。
やり方はこんな感じで行える。

baseFilePath = Application.streamingAssetsPath + "/" + fileName;
filePath = Application.persistentDataPath + "/" + fileName;
File.Copy( baseFilePath, filePath);

ただし、あまりデカいファイルをコピーすると端末のディスクサイズが不足するかもしれないので、要注意。