質問は基本的に1スレッドにつき1つの内容でお願いします。

お問い合わせの際は下記の情報を明記をお願いいたします。

▼ソフトウェアに関するご質問の場合

・【問題が発生したソフトウェア名とバージョン】(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・【ご利用のPC環境】例:Windows10、macOS HighSierra など
・【グラフィックボード】例:GeForce GTX 950M など
・【メモリ】例:8GB
・【原画(イラスト)を制作したソフトウェア】例:Photoshop , CLIP STUDIO , SAI など
・【問い合わせ内容がわかるスクリーンショットまたは動画】

---------------------------

▼SDKに関するご質問の場合

・現象の再現を行い検証させていただきますので、再現する最小のプロジェクトのご提供か、再現するまでの手順
・使用したSDKのバージョン

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.