こんにちは。ほげたつ(@HogeTatu)です。
前回に引き続き、Foot IKについて書いていきます。
今回は 立っている場所よりも高い位置に足を着こうとするとめり込んでしまう 問題に対する対応です。
LineTrace用のソケットを追加
LineTraceを用いて足と地面のめり込みを検出するため、スケルタルメッシュにソケットを追加します。
- foot_l に対して LeftGroundSocket を追加し、高さが地面すれすれになるようにオフセットを設定する
- foot_r に対して RightGroundSocket を追加し、高さが地面すれすれになるようにオフセットを設定する

両足のトレース処理を実施して地面までのオフセットを取得
アクターのZ値から、両足の内でより低い位置にある足のZ値までトレース処理を実施します。
これにより各足の地面からのオフセット値が取得できます。
この処理はアニメーションBP内からアニメーションを更新する度に呼び出します。

UpdateFootIK … 各足の地面からのオフセットを更新する


TryGetFootOffset … 各足のトレース処理

オフセットに従ってボーンを制御する
ボーンを制御する際はアニメーションBP内で TwoBoneIK 等を実行します。
TwoBoneIK ではいくつかのパラメータを指定できます。
ここでは、今回変更したパラメータを説明します。
IKBone |
制御対象のボーン |
左足なら foot_l(足首) |
Effector Location Space |
IK制御の座標系 |
今回はオフセット値に従って上下させるので、ボーン座標系(BoneSpace)を指定 |
Effector Space Bone Name |
IKの先端 |
左足なら foot_l(足首) |
Joint Target Space Bone Name |
IK制御時に曲げる関節 |
左足なら thigh_l(膝) |
Joint Target Location Space |
IK制御時に曲げる関節制御の座標系 |
今回は固定値になるように、親ボーン座標系(ParentBoneSpace)を指定 |


これで AnimPreviewEditor 内から EditPreview で LeftFootEffectorLocation や RightFootEffectorLocation のX値を変更してあげると、足が上下に動くことをプレビューできるかと思います。
それが確認できたら、EventGraph内で UpdateFootIK の呼び出しと、各足のオフセットを取得して EffectorLocation に指定してあげればIK制御が完了します。
こんな感じになります
終わりに
UE4のアニメーション関連はとても充実しており、使いこなせば色々なことができます。
まだまだ試していない機能も多いので、今後も時間を見つけて試していきたいと思います。