[[NSBundle mainBundle] pathForResource:@"MyMusic" forType:@"mp3"];みたいなコードを書いたことがあると思います。このBundleの仕組みを使うと、
- 複数の画像や文言、JSONなどのデータファイル、音楽などを一つにまとめて扱うことができる。個別のファイルとしてプロジェクトに加えなくてよいので利便性が良い。
- Bundleには最初から多言語化リソースを扱うための仕組みが用意されているため、多言語化が非常に簡単にできる。
- OS Xだけになりますが、Bundleにはコンパイル済みのコードを含められるので、プラグインの仕組みが簡単にできる。
で。このBundleによる配布はなかなか便利なので、UnityのiOSプラグインとして配布するときにも是非使いたいのですが、そのまま
/Assets/Plugins/iOS
以下にBundleを配置しても正しくBundleが認識されませんし、iOSのアプリにインストールされません。そこでBundleを配布するときは、
/Assets/Plugins/iOS/
以下ではなくて、/Assets/StreamingAssets/
以下にBundleを配置するようにしましょう。実は/Assets/StreamingAssets/
以下のパスには隠し要素があって、このパス以下のファイル・ディレクトリは全てアプリケーション自身の/Data/Raw/
ディレクトリに配置されるようになっています。参考: http://sehm.blog48.fc2.com/blog-entry-159.html
あとはプラグインとして用意したiOSコードの中で以下のようにしてBundleを取得すればOKです。
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"MyBundle" ofType:@"bundle" inDirectory:@"Data/Raw"]];これでUnityプラグインを多言語化したり画像リソースを使ったりするのが楽になると思います。
将来的にUnityのバージョンが上がって、
/Assets/Plugins/iOS/
以下においたBundleも扱えるようにしてくれると楽なんですが・・・Unity 3.5の地点ではどうもダメっぽいです。