★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
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を作るしか良い方法が思いつきませんでした。