UnityあるAssetBundleが別のAssetBundleに依存している場合、依存しているものを先に読み込まないとバグります。AssetBundleの基本的な使い方になりますが、改めてこの挙動を確認してみます。前提として、この記事では以下のようにPrefabとそのPrefabが参照するMaterialをAssetBundleにすることを考えます。AssetBundleのビルドやロードの手順は割愛します。Browserを使用しているので必要に応じて次の記事を参考にしてください。light11.hatenadiary.comまず依存関係のないAssetBundleを読み込んでみるまずPrefabとMaterialを一つのAssetBundleにまとめてみます。この場合AssetBundleは一つしかないので、もちろんAssetBundle間の依存関係はありません。この状態でAssetBundleをビルドすると、PrefabとMaterialの入ったAssetBundleが生成されます。生成されたAssetBundleを下記のスクリプトで読み込んでみます。assetBundle.LoadAsset<GameObject>("Assets/AssetBundle/Prefab.prefab");Instantiate(prefab);assetBundle.Unload(false);結果は次の通り、正常にAssetBundleが読み込まれました。依存先をロードしてからロードを行わないとバグる次にPrefabとMaterialに別々のAssetBundle名を付けてビルドしてみます。この状態でビルドすると二つのAssetBundleが作られます。PrefabはMaterialに依存しています。ビルドしたフォルダ直下にある、フォルダ名と同じ名前の.manifestファイルを開くと、AssetBundleの一覧とそれらの依存関係がわかります。(ちなみにこの.manifestはランタイムでは使いません。example/materialこの状態で、前節のスクリプトを使ってPrefabのAssetBundleを読み込んでみます。Prefabは読みこめたもののMaterialへの依存関係が解決されていないため、ピンクになってしまいました。依存関係を解決してロードするあるAssetBundleの中のAssetをロードするときには、そのAssetが依存しているAssetBundleを先に全て読み込む必要があります。今回の例では、まずMaterialのAssetBundleを読み込んで、そのあとにPrefabのAssetBundleからPrefabを読み込む必要があります。AssetBundleの依存関係は、ビルドしたフォルダの直下にある、フォルダと同名のAssetBundle(.manifestファイルではなくAssetBundleの方)をロードすることで取得できます。依存関係が評価されるのはあくまでAssetBundle.LoadAsset()の時点です。そのため、PrefabのAssetBundleのロードは必ずしも最後にやらなくてもOKです。これを実行すると、AssetBundle同士の依存関係が解決されて正常にロードが完了しました。まとめAssetBundle同士の依存関係がある場合には依存しているAssetBundleを先にロードしておく必要がある依存関係の情報はルートにあるAssetBundleに書かれているということがわかりました。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。インストールから基本的な使い方・注意点まとめ【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。