3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

キャタピラをコントロールリグでアニメーションする

Posted at

SplineIKでキャタピラを回したのでログ

CatapillerTest_CtrlRig1_02 2025-07-04 16-37-14.gif

環境 
UE5.6
Windows11

モデルの準備

image.png
とてもざっくりキャタピラを用意。ボーンの根本(回転するところ)が追従するメッシュの中心に来るように

今回はリーフボーンを使わないので余分なBoneを追加しておく
image.png

Bone図1.png

使わないとチェーンを適用した際にこんなかんじで重複が発生し変になる(一敗)
Bone図2.png

ControlRigを作る

前準備

ControlRigを作成し、余分の骨の分を除いた回転する部分のBoneにギスモを追加する
image.png

SplineIKに追加して、ボーンがリグを追いかけるようにしておく。
SplineはColsedにする
(SplineIKについて詳しい記事はこちら)
CatapillerTest_CtrlRig-Rig.png

こんな感じで線が出ていたらOK
image.png

ギスモを動かす

変数を追加する

image.png

名前 効果
TargetTransfromList 目指すべき目標のリスト
Each Controller Now Target List ID 今どのギスモがどの地点(0-9)を目指しているか
NextFutureTargetTransfrom これから進みたい目標地点の一個先の目標地点
NextTargetTransfrom これから進みたい目標地点
OldTargetTransform 今いる目標地点
MoreOldTargetTransform 今いる場所の一個前の目標地点
Cycle0-1 補間の進み具合
Speed 回るスピード

TargetTransfromList 以外のTransformの配列4つ(目標地点シリーズ)には初期値でいいので配列を10エレメント
Each Controller Now Target List IDは10エレメント作成したうえで0-9を割り振ってください
image.png

目標地点の取得

Construction Eventでこのコントロールリグが始まった瞬間の各ギスモのTransformを保存(配列の中身はギスモ一覧)
image.png

Get New Targetの中身

ギスモ1が①から②を移動するとき、①と目標地点の②、円弧の補間のために⓪と③が必要になります。
Bone図3.png

仮にギスモ2が②から③を移動するとき、②と目標地点の③、円弧の補間のために①と④が必要になります

これを開始時と移動し終わったときに自動で取得する関数です
全体図
CatapillerTest_CtrlRig1_02-GetNewTarget.png

パーツ1
image.png

関数が呼ばれたらまずギスモの配列をForLoopし、Loopが終わった際にReturnが呼ばれるようにしておきます。
またForLoopのIndex(要はどのギスモの話をしているか)もローカル変数に保存しておきます

パーツ2
CatapillerTest_CtrlRig1_02-GetNewTarget_0.png
Each Controller Now Target List IDから現在の位置(①とかどの番号を使っているか)を取得しローカル変数を作成して保存ます。次の目標地点の番号を取得するため、9でなければ+1、9であれば0をローカル変数を作成してSetしておきます。
次のパーツは9の判定のCompletedからつなげてください

パーツ3
CatapillerTest_CtrlRig1_02-GetNewTarget_1.png
さっき作成したローカル変数を足したり引いたりしながら、目標地点類をゲットし、配列にセットします。

Forwards Solve側の実装

タイマーの作成

補間を0-1の間で動かすためにタイマーを作ります
image.png

CycleにSpeedで掛け算したDeltaTimeを足して、1を超えたら先ほどのGet New Targetを呼び出しCycleを0に戻すだけの関数です

image.png
Sequenceなどで呼んでおきましょう

補間しながらギスモを動かす

最初はInterpolateで動かしていたのですが、脈動するキャタピラができてしまったので止めました(一敗)
ChatGPTにかかせたいい感じに補完させる式に突っ込んでいきます

CatapillerTest_CtrlRig1_02-Rig.png

何を言っているのかよくわからないので文字に起こします
↓もらった式
A = P1 × 2

B = (P2 − P0) × t

C = (P0 × 2 − P1 × 5 + P2 × 4 − P3) × t × t

D = (−P0 + P1 × 3 − P2 × 3 + P3) × t × t × t

Result = (A + B + C + D) × 0.5

↓こういうこと
A = OldTargetTransform × 2

B = (NextTargetTransfrom − MoreOldTargetTransform) × Cycle

C = (MoreOldTargetTransform × 2 − OldTargetTransform × 5 + NextTargetTransfrom × 4 − NextFutureTargetTransfrom) × Cycle × Cycle

D = (マイナスMoreOldTargetTransform + OldTargetTransform × 3 − NextTargetTransfrom × 3 + NextFutureTargetTransfrom) × Cycle × Cycle × Cycle

Result = (A + B + C + D) × 0.5

これをするとなんかいい感じに位置が計算されるので、これをForEachしたギスモにSetTransfromします

あとはこれをこんな感じでつなげてあげます
CatapillerTest_CtrlRig1_02-Rig_0.png

するとヌルヌル動くキャタピラを観測することができます

CatapillerTest_CtrlRig1_02 2025-07-04 16-37-14.gif

完成!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?