読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

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

【Unity】別AssetBundleへ分割したモデルが、分離されず元シーンに残ってるケースについて

f:id:tsubaki_t1:20160817220750j:plain

AssetBundleにて依存先と依存元を分割すれば、ロード時間やアセットのメモリ使用量等を上手く節約出来ます。

ただ、このアセットの分割でえすが分割されないケースがあります。

AssetBundleを分割する

tsubakit1.hateblo.jp

AssetBundleが分割されないケース

AssetBundleが分割されないケースは、以下の様な手順で確認出来ます。

  1. まずボールのモデルをprefab、シーンをsceneのAssetBundleに設定します。
  2. 次に、ステージ上の全てのアセットにstaticを設定します。
  3. 後はstageシーンをAssetBundleからロードすると、prefab assetbundleを読み込まなくともモデルが含まれています

f:id:tsubaki_t1:20160817221056j:plain

f:id:tsubaki_t1:20160817221618j:plain

 

f:id:tsubaki_t1:20160817221729j:plain

f:id:tsubaki_t1:20160817221737j:plain

BatchingStaticしたメッシュは結合する

この謎を解く鍵は、ロードしたアセットのメッシュをよく見ると分かります。通常であれば、メッシュを読み込む場合、読み込み先のメッシュが指定されます。今回の場合RollerBallが指定されているはずです。
しかし実行時にはCombine Meshと差し替わっています。

f:id:tsubaki_t1:20160817222321j:plain

今回の重要な事は、Batching Staticを設定している事です。staticにチェックを入れると、Lightmap staticやNavmeshStaticの他、全てのstaticにチェックが入ります

f:id:tsubaki_t1:20160817222857j:plain

ここでbatching staticに設定されているアセットは、ビルド時に結合(実際にメッシュを結合する訳では無い模様)され、参照元のメッシュとは異なるメッシュとして登録されるみたいです。そのため、今回紹介したような事象が起こった…という訳です。

実際にcombine meshを確認すると、見事に結合されてます。

f:id:tsubaki_t1:20160817223651j:plain

実際にbatching staticを外すと、ちゃんと期待通りに動作します。ただしbatcingは効きにくくなるので、そこはケースバイケースで。

f:id:tsubaki_t1:20160817224526j:plain

ちなみに、この現象はたぶん「シーンをAssetBundle化した」場合起こります。static設定はあくまで「シーン内で静的であること」が前提みたいなので、prefabにstaticを設定してもコレは起こらないと思います。

 

結構ゲームを見てると「とりあえずstatic」付けてる人は多いですが、実際にはOccluder staticやLightmap Static等、ちゃんと判断して設定する必要がある項目もあるので、注意が必要かなと思わなくも。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp