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を作る実装。
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を作る実装。
0
コメント
AssetBundleにGlobalMaskTextureを入れる目的によって最適な解決策が変わってきてしまいます。
よろしければ、その目的をお教えいただけませんか?
> そもそもCubismMaskTextureは削除することを考えていない?
GlobalMaskTextureのことだと思われますが、こちらはおっしゃる通り削除することを想定しておりません。
ただし、CubismMaskTextureをユーザ側で別途作成したインスタンスはお使い頂くことも可能です。
返事が遅くなってしまいました。
最終的にCubismMocとTextureのデータをAssetBundleに入れて
使うときにCubismModelを作るようにしました。
生成するときは重くなりますがリソースの管理のしやすさとCubismBuiltinPickersが
そのまま使えるのでMaterialの管理も楽になりました。
>AssetBundleにGlobalMaskTextureを入れる目的
こちらはインポートで作られるPrefabをAssetBundleに入れようとすると
それに紐付くアセットが自動で入るためGlobalMaskTextureも一緒に入ってしまう状態です。
理想はAssetBundleにGlobalMaskTextureを含まずアプリ側に入っている
CubismMaskTexture.GlobalMaskTextureが利用できれば良いのですが
GlobalMaskTextureだけのAssetBundleを作るしか良い方法が思いつきませんでした。