★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

アニメーション操作をAnimator ControllerとLateUpdate相互で操作した時の物理演算の挙動

いつもお世話になっております。

モデルのアニメーションをAnimator ControllerにXXXclipを登録(再生はしないがstateとしては存在する状態)の場合に
LateUpdateからXXXclipに設定されている同一の単一パラメータ操作した場合にLateUpdate側で操作したパラメータ値でoverrideされることは確認できたのですが
Animator Controllerにclipが存在している状態だと
本来LateUpdateで変更したパラメータに影響を受ける物理演算パラメータが影響を受けず振り子運動を行いません。

このような場合の解決方法はございますでしょうか?


タグ付けされた:

コメント

  • @morita さん

    モデルのPrefabに CubismUpdateController, CubismParameterStore はアタッチされていますでしょうか?
    もしアタッチされていないのであれば、これらをアタッチしても現象が発生するかご確認いただけますでしょうか?
  • @y_a_s_(Dev Staff) さん
    ご連絡誠にありがとうございます。

    > CubismUpdateController, CubismParameterStore
    こちら両方アタッチされていなかったので対応いたしましたが、現状に変わりはありませんでした。
    むしろCubismUpdateControllerを含めるとlateupdate側でパラメータ操作を行っても全て物理演算は全て動かなくなってしまいました
    (clipに含まれていないパラメータは元々物理演算動いていましたがそちらも含め動かなくなります)

    他の方法等はございますでしょうか?
  • @morita さん

    確認ありがとうございます。
    おそらく原因は各コンポーネントの実行順が原因だと思われます。

    Cubism SDK for Unity の各コンポーネントは、更新をLateUpdate()のタイミングで行っています。
    GameObjectにアタッチされているコンポーネントの実行順は、Unity側によって決められます。
    そのため、ユーザが追加したパラメータの値を操作する処理が物理演算よりも後に呼び出される、またはパラメータの値を操作する処理と物理演算の間に他のコンポーネントによって値が上書きされてしまうことで、物理演算が意図通りの動作をしていない可能性があります。

    この現象を回避するには、Unity側でコンポーネントの実行順を明示的に設定する、またはCubismUpdateControllerを利用するという2つの方法があります。

    CubismUpdateControllerは、Cubism SDKの各コンポーネントの実行順を制御するものです。
    すべてのCubismのコンポーネントは、CubismUpdateControllerに自身の更新処理の関数を登録し、CubismUpdateControllerによって適正な順序で各コンポーネントの更新処理が呼び出されます。
    ユーザ独自のコンポーネントもCubismUpdateControllerに更新処理のタイミングを管理させることができます。
    こちらを利用して任意のタイミングで処理が呼び出されるようカスタマイズすることで現象を回避できると思われます。
    CubismUpdateControllerの使用方法については以下のドキュメントをご覧ください。
    https://docs.live2d.com/cubism-sdk-manual/updatecontroller/

    Unityによってコンポーネントの実行順を制御する方法は、公式のドキュメントを参照してください。
    https://docs.unity3d.com/ja/Manual/class-MonoManager.html
  • 返答が遅れてしまい申し訳ございません。

    上記の内容通り事前に実行順番を設定することによに、想定通りの動きを実現することができました。
    ご返答誠にありがとうございました。
コメントするにはサインインまたは登録して下さい。