Unity5.3.0f4
■アセットバンドル名の命名時の注意事項
※(注意1)
フォルダ内にファイルがある環境を想定
・フォルダだけにアセットバンドル名を付ける
⇒アセットバンドル出力する
⇒フォルダの中身のファイルがアセットバンドルになる。
・フォルダとフォルダ内ファイルの両方にアセットバンドル名を付ける
⇒アセットバンドル出力する
⇒フォルダはアセットバンドルにならない、フォルダ内ファイルがアセットバンドルになる。
※(注意2)
ライトはアセットバンドル名をつけてもアセットバンドルとして出力されない。
ここで言うライトとは、LightingウィンドウのLightmapsタブのLighting Data Assetの事
Unity5.1.0
■Assetbundle.Unload(false)の使い方
下記リファレンスの文章によると
unloadAllLoadedObjects が false の場合、アセットバンドルの中にある圧縮された
アセットのファイルデータはアンロードされますが、このアセットバンドルによりロード
された実際のオブジェクトはそのまま保持されます。当然ながらこのアセットバンドルから
追加でオブジェクトをロードすることは出来なくなります。
unloadAllLoadedObjects が true の場合、既にロードされたオブジェクトも含めて
破棄されます。 シーン上でこれらのアセットを参照するオブジェクトについて、
それらへの参照は Missing となります。
と書いてあるので、AssetBundle.LoadAssetした後AssetBundle.Unload(false)を
使用してAssetBundle自体を保存しておくメモリをアンロードすると**LoaAssetした
メモリ(AssetBundleから中身をロードしたメモリ)**は削除されないと思っていたが、
どこにも参照がない(使われていない)ものは、AssetBundle.Unload(false)をした時点で
メモリ上から 削除されてしまうとの事です。(公式に確認しました)
そもそもTextureやMaterialはInstantiateしないので参照されないとただメモリ上に
データがあるだけになる、どうしてもAssetBundle.Unload(false)したいのであれば
変数に入れるなりして参照を持っておく必要あり、ただメモリのピーク値とか管理する仕組み
をしっかり考える必要あり。
■リファレンスのページ
http://docs.unity3d.com/jp/current/ScriptReference/AssetBundle.Unload.html
■マニフェストファイルについて
GetAllDependencies(アセットバンドル名)で、
指定したアセットバンドル名に依存する全てのアセットバンドルを取得できる。
ただ、依存関係の最下層からの順にはなっていないので依存関係の最下層からの
依存関係になるように並び替える必要がある。
(プレハブとAnimatorController以外は順序を考える必要ないとコメントいただきました。)
RuntimeAnimatorControllerに紐づくfbxが複数あった場合、
全てのfbxファイルをロードしてからRuntimeAnimatorControllerをよまないと
Animationが正しく再生できないので元となるものをロードしてから大元をロードする
ように並び替える必要がある。
Aに依存するB・CがありBに依存するものがDであった場合、
GetAllDependencies(A)で帰ってくるのはBDCかもしれないしCDBかもしれない
このあたりに規則がありそうだが依存関係の最下層からの順番に並び替えてくれる
わけではないので、自分で並び替えてリスト構造にすればOK
■アセットをロードする順番について**(Android実機確認)**
とりあえず同じことだけど書いておく
RuntimeAnimatorControllerはFBXを読み込んだ後で無いと(Ver Unity6.1.0f3)ではエラーとなる、
バージョンが上がれば解決されるかも。
prefabとなるGameObjectは必ず一番最後に読む事・・なんか不安定(Ver Unity6.1.0f3)
読み順関係ないはずなのだが、Texture2DをMaterialより先に読まないと
テクスチャが外れてるみたいでキャラクターが真っ白になりました。(Ver Unity6.1.0f3)
アセットバンドルのロード周りはまだ不安が残るなあ。
Issue Trackerとか調べようか