指定するボーンをエンジン上で繰り返し回転させたい

上記の画像のようにDCCで書き出したスケルタルメッシュをエンジン上で"_01"~"_03"を一定速度でZ軸に繰り返し回転アニメーションをつけたBPを作りたいのですが、どうしたらいいでしょうか?

可能であれば、指定ジョイントの増減、個々に軸の指定、速度と回転する向きは調整できると他のアセットでも流用できるようにしたいと思っております。

AnimBPとControlRigを使うとよいでしょう
ボーン(ジョイント)の数が増減するのであれば、ControlRigで組むのが良いと思います

AnimBPからBPの変数を参照することで、BP側から速度等をコントロールすることも可能になります

1 Like

解答ありがとうございます!
モーション周りに疎いところがあるため可能でしたら具体的なやり方を教えていただけますでしょうか。

実例を作ってみました


※ BPの基本的な操作と、ControlRigそのものの扱い方は割愛します


このSkeletalMeshからControlRigを作成します

ForLoopとIntToNameを使用し、動かしたいBoneのSuffixを生成します
それを指定のPrefixと合体し、Bone名として扱います

回転値については変数とし、外から渡す形にします
各変数は適宜InstanceEditable(インスタンス編集可能)に指定してください

AnimBPのセットアップをします
AnimBPからControlRigへ変数を渡すように設定します

回転値はEventGraph側で計算します
BP側に回転速度としてRPMを持たせたので、1フレーム分の差分を計算し、加算して反映します

上記のような構成であれば、求める要件に対応できるでしょう
ControlRigは特定のスケルトンアセットに依存しないので、複数のスケルトン間で使いまわしが可能です
対象のBoneが増えても、RotatorCountを変更して対応できます
回転を逆にする場合は、回転値の差分計算をマイナスにすればよいです

1 Like

丁寧にありがとうございます!
少々、躓いてしまったところがあるのすがABPを組んでいる時に"Get Current RPM"が出てこないのですが、どうすればだせるようになるでしょうか。

解説通りに組んだ後、BPではスケルタルメッシュを入れて、作成したABPを読み込む。そしてイベントノードで再生させるということでよろいいでしょうか。

BPのユーザー関数です
必要に応じて任意のものを作成してください

1 Like

すみません。どうやってもっていくのかもよく理解できていないため、お手数をおかけしますが教えていただけないでしょうか。

GetCurrentRPMはActor側(BP)に作ったユーザー定義関数です
Actorが持つ変数RPMを他のBPに渡すために作成しています

作成方法についてわからない場合は公式チュートリアル等を参照してください

1 Like

ありがとうございます。
実践してみたのですがこの形でしか出せないのですが何が原因でしょうか。

Pure関数であるかどうかの違いです
Pure関数は実行ピン(白)がなく、実行時に結果を保存しません

今回は変数の値を出力するだけなので、Pure関数にしています

公式ドキュメント

1 Like

なるほどPureにするとそうなるのですね!
無事に作ることができました!ありがとうございます!!