Unity
FinalIK

UnityChan.SpringManagerをVRIKに対応させる

ユニティちゃん付属のSpringManangerVRIKと相性が悪かった問題の解決メモ。

ViveやVRIKに関してはこちらを
https://qiita.com/halne369/items/daadf0e00330a1019830

ユニティちゃんの髪揺れに関してはこちらを参照のこと
http://tsubakit1.hateblo.jp/entry/2014/11/08/233000

ユニティちゃん+SpringBone+VRIK

SpringBone付きのユニティちゃんを動かすと

こんな感じで髪が揺れる。

ところが、VRIKをアタッチした状態だと

OnlyVRIK.gif

このようにSpringBoneが動作しない。

SpringManagerの修正

SpringBoneの更新がVRIKの更新より前に行われてしまっているのが原因らしいので、SpringManagerのScript Execution OrderをVRIKより後に設定すれば解決する。

結果

SpringVRIK.gif

もしくはVRIKの更新を自前で行なう。例えばSpringManagerLateUpdate

        private void LateUpdate ()
        {
            var solver = GetComponent<RootMotion.FinalIK.VRIK > ();
            solver.UpdateSolverExternal();

            ...
       }

とすれば正常に動作する。

真面目に考えるとSpringBoneの更新前にtransformが上書きされるのが問題っぽいので、Updateで更新してしまっても良い。

        private void Update ()
        {
            var solver = GetComponent<RootMotion.FinalIK.VRIK > ();
            solver.UpdateSolverExternal();
       }