[UE5]オリジナルモデルのAnimBPにControlRigでFoot IKがつけたい

## はじめに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7e137d44-ad29-9207-8d0d-2d63d9d2b7cc.png)

MannequinみたいなFootIKをオリジナルモデル（今回はVroidでやっていますが内容的には汎用的なものです）にも適用したい

※アニメーション初心者なのでもし何かしら間違っている箇所があれば教えてください。直します
※内容はだいたいコピペ作業です。つま先は曲がりません

環境
UE5.2

ThirdPersonCharactorのControlRigを流用しているため、事前にThirdPersonテンプレートをプロジェクトに落としておくことを推奨します。

## コントロールリグを作る

FootIKを作りたいSkeltalMeshのControlRigを作ります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/cd1039bb-0b5a-1d92-ce6b-edfa90da72cb.png)


Game/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIKの
CR_Mannequin_BasicFootIKを開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9c45d366-4ae3-23ac-fd76-be5caf52cbc0.png)

囲いの範囲をすべてコピペして自作モデル側のコントロールリグに貼り付けます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/5e547585-614f-3870-71a2-5e688181dd3c.png)

変数がないのでこんな感じでスカスカになると思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9898242b-54d5-cbf8-824e-dcf693396428.png)

#### 変数を作る

左下のマイブループリントタブを開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/4f8a2399-0660-d73c-e341-ca77ba792c04.png)

必要な変数を足していきます
今回必要な変数は６つです。適当につけているのでとりあえずThirdPersonのControlRigと同じ数だけ変数があればいいです。

・Use IK (Bool)　　　　　：IKを使用するかどうかのフラグ
・Foot_L_Origine(Float)　：アニメーションからとった補正前の左足のZ座標
・Foot_R_Origine(Float)　：アニメーションからとった補正前の右足のZ座標
・Foot_L_Offset (float)　：補正した左足のZ座標
・Foot_R_Offset (Float)　：補正した右足のZ座標
・Peivis_Offset (Float)　：補正した腰のZ差表

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/ab35c2e8-e185-faed-a3ad-c15d2f02d9ea.png)

Use IKはあとからAnimBP側で切り替えれるよう目を開けてインスタンス編集可能な状態にしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/47a7dd16-7ae5-e399-94c1-314c8742a20b.png)


#### ノードを組む

ThirdPersonのコントロールリグを参考に変数を配置していきます。
変数はControlRigでは特殊な姿となっています。
普通の変数と同じように左のタブからD＆Dすれば配置することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/d68bae70-fab1-2976-ae74-37ef18e9d02a.png)

一段目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1692843b-03e8-814e-d287-b7b94619378e.png)

二段目左側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/5f9b61c8-e80d-bcd0-5599-7af32f77cd30.png)
二段目右側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/52456929-218b-41fd-a6d5-fdb0ea293f83.png)

三段目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/76b1f754-4e70-1b05-2bb5-a0967f776326.png)

四段目
四段目に変数の配置はいりません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/47cca88f-0617-92bc-1609-b6635ae287f4.png)


#### ボーンを割り当てる
今ノードに入っているボーンはThirdPersonにしかないボーンがほとんどなのでオリジナルキャラクターのボーンを割り当てていきます

ボーンが足りないので位置座標をとるようの偽の骨（バーチャルボーン）を入れます
左下のタブ群の一番左のリグ階層タブを開きます
下の方の空白を右クリックして新規から新しいボーンを作ります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7e463971-79c4-1930-23ba-020a85733be2.png)

・VB_FootL
・VB_FootR
二つ作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9e9238da-8e3a-4c7f-de27-fccdd6dc7f3f.png)

偽の骨たちに位置情報を入れていきます。
ノードの最初に移動します。

階層から骨をD＆Dして配置します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/c25157b7-de31-aec4-af2d-b0ec35c77e10.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/d2b76913-1ddf-ac92-3468-edc59ccaf71e.png)

左足と右足分を設定で出します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/81ce2a04-9d65-53a1-13e0-5fc38bfe0dc2.png)

大体足のボーンの一番先頭のボーンを各足取得してきてつなげます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/040bf12f-898e-c738-071f-e215179f45ad.png)
（この図のような位置にあるボーンを各足選んでください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/8dadcd1f-15b7-d4ae-1014-acd608b90eb2.png)
ボーンを取得してきてTransformをつなげます。

右側のノードたちにボーンを割り当てていきます。

一段目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/bf5e37fd-1e26-f60b-efa7-b58b3c25f716.png)

三段目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/c4e71ed5-9424-5d22-024f-590fe3e5383f.png)

三段目の一番右のPeivisOfffsetにはいわゆる腰骨（Rootの一個下などRootではないが全身が動くボーン）を指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/599251da-401b-71ea-a1a7-f22010f7b9bc.png)

四段目
左側は偽の骨、右側にはきちんと存在している骨が入っています。Rootには上の腰骨を指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f2e646c9-aecb-0a84-1242-76c70671731e.png)

ControlRig側はこれで完成です。

## AnimBPを作る

AnimBPをコントロールリグを作ったボーンで作成します。
AnimGraphを開きます。

コントロールリグノードを出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f81cf750-ea3d-a4a5-fb0b-ebcd8c2ac630.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/8120d196-a453-618a-f847-9e6c27734c21.png)

コントロールリグの詳細から先ほど作成したコントロールリグを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/968844be-71f5-b744-67c0-ee6bcc558c2a.png)

コントロールリグ側でインスタンス編集可能に設定した変数はここから入力ピンを出すかどうか選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/cfa34ba9-3bf6-a4ec-d1b7-ef81895995a7.png)

チェックをつけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f3b24b3e-f5de-ad82-6ac2-c902d1cc83b5.png)

動作確認のためにチェックをつけて人型をそのまま出力ポーズにつなぎます。
ThirdPersonのようにコントロールリグの入力にアニメーションをつなぎ、UseIKの部分に落下判定などを入れることでIKをオンオフすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/c0013e39-5d3a-8e5b-7673-95342f415a3a.png)

## 完成

AnimBPをレベル上に配置してシミュレーションモードで動かしてみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/68f697ca-5b96-ccc9-38b0-774b4dd5e3a0.png)
きちんと動作しました！