スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Unity備忘録] アセットをResourcesフォルダに入れるかどうかの判断基準

わりと当たり前な機能にいまさら気づきました;

えーっと、まず

結論1
スクリプトから読み込むファイルは Resources フォルダに入れる。
スクリプトから読み込まないファイルは Resources フォルダに入れない。

そんで

結論2
シーンで使用していないアセットは Resources フォルダに入れていなければビルド時に除外される。

っていうことを学習したのでメモメモ“φ( ̄ ̄*)



先日、Unityのチュートリアル を読んでたら以下の記述が目に止まった。

ビルドの内部工程について
ビルドプロセスではまず、指定された場所にゲームアプリケーションの空のコピーを置きます。
次にビルド設定にあるシーンリストを順にたどりながら、エディターで一旦ひとつずつ開き、最適化し、アプリケーションパッケージとして統合していきます。
そして、シーンごとに必要なアセットを算出し、パッケージにそれぞれ格納していくわけです。


おお!そうだったのか!
そうとは知らず必死こいて制作末期に余計なアセット削除していたよ・・・
無駄な努力だったとは

アセット参照の素敵っぷりの威力を考えれば当然の機能なのでしょう;
想像力が足りなかった世・・・


っというわけで!
べつに疑ってるわけではないのですが、一応確認しておきたい挙動もあるので何パターンか実験してみました。



▼実験手順
1.適当なプロジェクトを作成

2.50MB の wav ファイルを一つ用意して AudioClip として Assets フォルダにインポート

3.その AudioClip を BGM(AudioSource)としてシーンで使用したり使用しなかったりしながら PC(Windows)用に何パターンかビルド

4.***_Data フォルダのサイズを確認して比較



▼実験パターン
(A)→ BGM のないシーンを作成してビルド

(B)→ BGM があるシーンを作成してビルド

(C)(A)のシーンと(B)のシーンを両方 Scenes in Build に追加した状態でビルド
  ※(A),(B)の順番で登録(最初のシーンは(A)
  ※(B)へは遷移しない(コーディングしていない)

(D)(B)のシーンのみを Scenes in Build に追加した状態でビルド
  ※(A)との違いは Scenes in Build を使用してることと Assets フォルダ内に(B)のシーンが存在していること

(E)(D)の状態で BGM の AudioClip を Resources フォルダに移動してビルド



▼実験結果
(A)→ BGM のないシーンを作成してビルド
9MB

(B)→ BGM があるシーンを作成してビルド
59MB

(C)(A)のシーンと(B)のシーンを両方 Scenes in Build に追加した状態でビルド
59MB

(D)(B)のシーンのみを Scenes in Build に追加した状態でビルド
9MB

(E)(D)の状態で BGM の AudioClip を Resources フォルダに移動してビルド
59MB



とまあ(A)(D)までは対象のアセット(BGM)が使用されているシーンがビルドされると 50MB しっかり増えてます。

「使用」というのはもちろん「参照」という意味です。
(C)については今回 Application.LoadLevel などを使用していないので、事実上は BGM を使用するシーンが読み込まれる事はありません。
が、前述の記事では

ビルド設定にあるシーンリストを順にたどりながら、エディターで一旦ひとつずつ開き、最適化し


と書かれていますから Scenes in Build に登録されたシーンは全てチェックされているものと思われます。
((A)と(B)は登録してないけどシーンリストが空の場合は開いていたシーンをデフォルトで選択されたものと思われます)
逆に言えば Scenes in Build に登録されていなければシーンデータ自体は存在していてもチェックされることはないと言えます。

(D)がそれの実例です。
BGMが使用されているシーンを Scenes in Build から除外しただけですが 50MB 減っています。

テスト用のシーンで色々実験に使ったデータだけど本編では使用しなかった、みたいなケースでもテストシーン自体が登録されていないのであれば、パッケージに含まれないので安心して運用できますね。

重要なのは(E)の結果です。
BGM の AudioClip を Resources フォルダに移動しただけで使用されているシーンがないのに 50MB 増えてしまいました。
なぜかと言うと Resources フォルダに入っているアセットはスクリプトから Resources.Load で読み込まれる可能性があるためです。(詳しくはこちら

っと言うより、スクリプトから読み込むアセットをビルド時に除外させないために Resources フォルダがあるんでしょうね^^;

そう言ったわけで冒頭の結論になります。
Resources フォルダに入れるとスクリプトで管理できるので取り回し良さげですが、パッケージサイズを抑えたい場合はなるべく Resources フォルダの使用を控えて、不要なアセットの最適化を Unity に任せてみるのがいいかと思いました。


ちなみに・・・非アクティブな GameObject や無効化された Component に関連付けられたアセットもビルドには含まれるようです。
スクリプトやアニメーションからON/OFFできるからだと思います。
含めたくない場合はシーンから削除するしかありませぬね・・・(・ω・)


この記事の内容はUnity4.5.3で確認したものです。
スポンサーサイト

テーマ : Unityゲーム制作
ジャンル : コンピュータ

コメントの投稿

非公開コメント

timeline
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。