ようこそ!

初めてですか? 参加するには、どちらかのボタンをクリックしてください!

【Live2D Creators Circleのご案内】
Live2Dでは現在、業務をお手伝いしていただけるユーザーの方々を募集しています。
もし、ご興味がありましたら下記URLより詳細をご確認ください。
https://goo.gl/0oBmkq
 
いつもLive2Dコミュニティをご活用いただきありがとうございます。

不具合のお問い合わせの際は迅速な対応にするため、
お問い合わせ内容に加えて下記の情報を明記してくださいますようお願い申し上げます。

・問題が発生したアプリケーション名とバージョン(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・ご利用のPC環境(例:Windows10、macOS HighSierra など)
・グラフィックボード(例:GeForce GTX 950M など)
・メモリ(例:8GB)
 

Cubism3 SDK でのAssetBundleについて

Unity Cubism3 SDK で作られたデータをAssetBundleで配信するのに困っており質問です。

Unityでインポートしたとき自動で作られるPrefabをAssetBundleに入れて配信する設計にしたのですが、
この場合GlobalMaskTextureがAssetBundleに入るのでAssetBundle.Unload(true)で解放したときに
CubismMaskTextureのOnDestroyが呼ばれないためCubismMaskCommandBuffer.RefreshCommandBufferで
nullエラーが出るようになります。

AssetBundle.Unload(false)を使ったとしてもCubismMaskCommandBufferを自分で掃除する必要があります。
ScriptableObject.Destroyを使うようなところは無かったのでそもそもCubismMaskTextureは削除することを考えていない?

そこで、解決策として以下の3つを考えたのですがAssetBundleで想定された利用方法があるのであれば知りたいです。

・CubismMaskCommandBuffer.RemoveSourceを自分で呼び出す
各AssetBundle毎にGlobalMaskTextureのInstanceが作られるならそのキャラを消すときに外してしまって問題無いはず。

・GlobalMaskTextureだけのAssetBundleを作って紐付ける
GlobalMaskTextureの入ったAssetBundleと紐付けるようにAssetBundleを作成、
GlobalMaskTextureのAssetBundleを常に開いた状態にすることでインスタンスが常に残るようにする。

・そもそもインポートで作られたPrefabを使わない
CubismModel3Jsonの実装を参考にCubismMocのデータからCubismModelを作る実装。

コメント

  • @toshi さん

    AssetBundleにGlobalMaskTextureを入れる目的によって最適な解決策が変わってきてしまいます。
    よろしければ、その目的をお教えいただけませんか?

    > そもそもCubismMaskTextureは削除することを考えていない?
    GlobalMaskTextureのことだと思われますが、こちらはおっしゃる通り削除することを想定しておりません。
    ただし、CubismMaskTextureをユーザ側で別途作成したインスタンスはお使い頂くことも可能です。
  • edited 9月 2017
    @y_a_s_(Dev Staff)

    返事が遅くなってしまいました。
    最終的にCubismMocとTextureのデータをAssetBundleに入れて
    使うときにCubismModelを作るようにしました。
    生成するときは重くなりますがリソースの管理のしやすさとCubismBuiltinPickersが
    そのまま使えるのでMaterialの管理も楽になりました。

    >AssetBundleにGlobalMaskTextureを入れる目的
    こちらはインポートで作られるPrefabをAssetBundleに入れようとすると
    それに紐付くアセットが自動で入るためGlobalMaskTextureも一緒に入ってしまう状態です。

    理想はAssetBundleにGlobalMaskTextureを含まずアプリ側に入っている
    CubismMaskTexture.GlobalMaskTextureが利用できれば良いのですが
    GlobalMaskTextureだけのAssetBundleを作るしか良い方法が思いつきませんでした。
Sign In or Register to comment.