【UE5】コントロールリグで手を握る仕組みを作ってみた

に公開

はじめに

状況にあわせて指の開閉を行わせるためにコントロールリグで仕組みを作ってみました。

専用のfloat変数を用意して、0の時に通常、1の時に握るようにしています。
この記事ではこちらの実装方法をご紹介します。

1.指コントローラーの作成

指のジョイントにコントローラーを作成します。

手首が動かしたときについてきてほしいのでhandボーンの子にしました。

2.0~1で値を変化させる仕組みの作成

ポーズを操作する変数として「gripAlpha」というfloat変数を用意しました。
値の範囲を0~1にしておいたほうが扱いやすいと思います。

SetControlRotatorノードを作成し、Weightと作成した「gripAlpha」変数を繋ぎます。
これで「gripAlpha」が1の時にノードのRotatorに設定した値にコントローラーを回転することができるので、この仕組みを各指に対して行います。

3.握るポーズの作成と適用

コントーラーを動かして手を握ったポーズを作成します。

ポーズを作ったらすぐにコンパイルはしません(初期値に戻ってしまうので)。コントローラーに設定したRotatorの値をSetControlRotatorノードのRotatorにコピペしていきます、これを各指に対して行ったあとにコンパイルして完了です。

まとめ

各指の遅れや関節ごとに曲がる速さを調整をすればもっと自然になると思いますが、細かい動きの調整がしづらく、そこまでこだわるシチュエーションで使うのであればアニメーションを作ったり、別の方法を考えた良いかもしれません。とはいえ動的に状況に合わせた動きを足したい場面は多いはずなので、より効果的な使い方や仕組みの作り方を探っていければと思います。

Discussion