はじめに
今回はFinal IK
というアセットのFBBIK Grounder
を用いて、キャラクターの足の位置を地面に合わせてみたいと思います。
できるもの
概要
今回紹介するGrounder
は足の位置を地面に接地するように垂直方向に補正を加える機能になります。
Grounder is an automatic vertical foot placement and alignment correction system.
http://www.root-motion.com/finalikdox/html/page9.html
具体的な手法は足の位置からRaycast
を飛ばし、ヒットした位置まで足を移動させてあげるようです。
http://www.root-motion.com/finalikdox/html/page9.html
利用アセット
やり方
Full Body Biped IKコンポーネントをアタッチ
Grounder
を利用するためにはFull Body Biped IK
コンポーネントをアタッチする必要があります。
Final IK includes an extremely flexible and powerful high speed lightweight FBIK solver for biped characters.
FullBodyBipedIK maps any biped character to a low resolution multi-effector IK rig, solves it, and maps the result back to the character. This is done each frame in LateUpdate, after Mecanim/Legacy is done animating, so it is completely independent from the animating system.
端的にまとめるとFullBodyBipedIK
は2速歩行キャラクター用の高速かつ軽量なフルボディIK solver
で、アニメーションした後のLateUpdate
にて補正を行うよといった感じです。
一見難しそうに見えますが、私たちがやるのはHumanoid
型のキャラクターにFullBodyBipedIK
コンポーネントをアタッチするだけです。
また自動で対象となるボーンを指すReferences
を入力してくれるので、細かい設定をする必要がないなら本当にアタッチするだけでOKです。
パラメーターの詳細
パラメーター | 意味 |
---|---|
fixTransforms | Trueに場合、Updateでソルバーが利用する全てのTransforms を初期状態に固定する。アニメーションされていないボーンやアニメーションカリングで起こりうる潜在的な問題を解決できる。比較的コストは大きくないそう。 |
references | ソルバーを構築するために必要なキャラクターのボーンへの参照。 |
rootNode | ボディの中心となるボーンへの参照。 |
weight | IKの効果を滑らかにブレンディングするための重み。 |
iterations | ソルバーの反復回数。0の場合は動作させない。 |
Body
以下に関しては省略させてください。
Grounder FBBIKコンポーネントをアタッチ
冒頭で説明したように、Grounder FBBIK
コンポーネントをアタッチします。
こちらはSolver -> Layers
がデフォルトでNothing
になっているので変更してあげる必要があります。
Layers
はどのLayer
に属するゲームオブジェクトと接地判定を行うかを設定する項目で、適切に設定してあげます。
お試しで動作確認をするならEverything
でも良いと思いますが、範囲が広ければ広いほどコストがかかってしまうことを忘れないでください。
パラメーターの意味
パラメーター | 意味 | |
---|---|---|
layers | 歩く地面のレイヤー。キャラクター自身のレイヤーを含めないよう注意。 | |
maxStep | 足の最大オフセット。 | |
heightOffset | キャラクターの高さのオフセット。 | |
footSpeed | 足の補間速度。値を上げると、滑らかさを犠牲に正確さがあがります。 (range: 0 - inf). | |
footRadius | 足の大きさ。 (range: 0.0001 - inf). | |
prediction | 予測する範囲の広さ。値を大きくするとより遠くの障害物まで調べますが、滑らかさが悪くなります。 (range: 0 - inf). | |
footRotationWeight | 足の回転をオフセットするための重み。(range:0 - 1) | |
footRotationSpeed | 足のオフセットを補間する速度。 (range: 0 - inf). | |
maxFootRotationAngle | 足のオフセットの最大角度。(range: 0 - 90). | |
rotateSolver | Trueにすると、キャラクターのローカル座標の上方向ベクトルを足の位置補間で利用する垂直ベクトルとして利用するようになります。キャラクターが壁を歩いたり、天井を歩いたりできるようになりますが、パフォーマンスに影響が出ます。必要ない場合はオフにすると良いでしょう。 | |
pelvisSpeed | Pelvis(骨盤)の移動速度。 大きくすると、キャラクターの体が上下に素早く動くようになります。 (range: 0 - inf). | |
pelvisDamper | キャラクターのルートの垂直方向の動きを抑えます。(range: 0 - 1). | |
lowerPelvisWeight | Pelvis(骨盤)を一番下にある足に移動させるときの重み。 階段を降りるときに有効なよう。 | |
liftPelvisWeight | Pelcvis(骨盤)を一番上にある足に移動させるときの重み。キャラクターがしゃがんでいるときや高い障害物を登る時に有効だそう。 | |
rootSphereCastRadius | ルートのキャストする球の範囲。 | |
quality | 品質。 Fastest < Simple < Best |