アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE5】Constraintを使い物理動作を試す

Constraintを紹介します!

今回はConstraintを使用して、

物理的な動きや物理的な接続を切ったりしてみようと思います。

Constraintを使用することで下記の動作を作れたりします。

PhysicsConstraintを使ってみる

まずPhysicsConstraintは何が出来るのかを説明していきます。

PhysicsConstraintでは揺れるものや力を加えたら解除されるなどの、

物理的な動きを再現したりする場合に使用します。

下記動画のように武器を接続して動きに合わせて揺らして、

よりリアルに見せたりすることに使ったりもします。

それでは実際にPhysicsConstraintを使い簡易扉のようなものを作ってみます。

まず柱となる部分のモデルと扉となる部分のモデル配置します。

今回は簡易扉なのでサードパーソンテンプレートにある、

SM_CubeとSM_Cylinderを使用します。

Constraintを設定するモデルの配置

配置が完了したら扉側のモデルとなるSM_Cubeの設定を変更します。

物理動作を行えるようにするために、

トランスフォームの可動性をムーババブルに変更して、

SimulationPhysicsをオンにします。

扉側のモデルの物理動作をオンにする。

そちらが完了したら、SM_Cylinderの方にPhysicsConstraintを追加します。

PhysicsConstraintコンポーネントを追加

追加が完了したら各種設定を行います。

まず何と何を接続させるか指定するために、

ConstraintActor1、ConstraintActor2の各Actorを指定します。

ConstraintActorの指定

※ちなみにボーンを指定して動かしたりすることも可能です。

 動かした場合の例が以前ツイートしたこちらになります。

続いて今回は扉の回転をしてほしいだけで、

扉と柱の動きは固定しておきたいので、

LinearLimitsをすべてLockedに設定します。

LinearLimitsの固定

位置の固定が完了したら、今度は角度の指定も行います。

こちらは曲がりすぎたりしないようにするために設定します。

この場合はポール側から接続しているものの回転域を固定します。

AngularLimitenを指定して回転角度の調整

最後に扉を開いた後に元に戻るような、

動作をつけるための設定をします。

角度モーターという項目でどの角度でどのスピードで戻るか指定します。

自動で戻る動作の調整

これで簡易的な扉は完成です。

ただこれだけだと反対に扉が無い状態になってしまうので、

反対側にも同じものをコピーして配置してあげます。

Altキーを押しながらドラッグするだけでコピーできます。

文字だと分かりづらいので動画にしてみました。

実際に動かしたものはこちらになります。

簡易扉を通過した後、元に戻るかと思います。

他にも参考動画のように車輪の設定をしたりも出来ます。

各種パラメーターの説明も必要かなと思ったのですが、

私が説明するよりも公式のリファレンスの方が分かりやすいので、

こちらをご参考にしていただければよいのかなと思いました。

・目次に戻る

Constraintを解除してboneの接続を切る

つづいてはゲームでよくある腕が取れたりする演出を、

BreakConstraint関数で表現することが可能な場合もあります。

ちなみにスケルタルメッシュと付随して、

物理アセットというものがありますが、

この中でもコンストレイントが設定されており、

接続や角度の制限などを指定していたりします。

物理アセットのコンストレイントの表示

このコンストレイントの接続を解除することで、

腕が取れたような演出をさせることが可能になっています。

※ただしグレイマンのようなきれいに接続部分が分割されている場合に限ります。

 UE5で追加されたMannyやQuinnではモデルが結合してしまっているため、

 コンストレイントを解除してもメッシュ部分が伸びてしまいます。

 グレイマンも足先や頭など伸びてしまう部分があるので注意してください。

メッシュが伸びてしまう恐怖映像

下記のチュートリアルで細かく説明されています。

今回は上記の仕組みを実装します。

まずインプット系のイベントを追加します。

プロジェクト設定のインプットでアクションマッピングから追加します。

今回はGキーを使用しています。

アクションマッピングの追加

続いてライントレースを飛ばすための開始地点で、

ソケットを使用しているのでソケットを追加してあげます。

hand_rにソケットを追加してhand_r_socketが追加されています。

右手にソケットを追加

それでは実際にBPに組み込んでいきます。

実装に必要なイベントグラフや関数変数を紹介します。

・インプットアクション → 入力した際にレイトレースを行う。

・BoneBreakConstraitn → 当たったボーンの接続解除を行う。

・SwitchBoneName → ボーン名から外したいボーンを指定する関数。

・As Skeletal Mesh Component → 例が当たったスケルタルメッシュ変数。

必要なコンポーネントと関数

上記追加した内容を元に実装していきます。

まずはインプットアクションですが実装内容は下記になります。

インプットアクションから例を飛ばす

スケルタルメッシュの場合は接続を外す処理になります。

ライントレースにヒットしたのがスケルタルメッシュだった場合の処理

接続を解除する処理になります。

指定したボーンの解除の処理

上記画像のSwitchBoneName関数の中身の処理になります。

ボーンを選択する処理

最後にbodyが分離された場合にラグドール化する処理になります。

bodyに当たった場合のラグドール化

以上が動作の処理になります。

実際に動作させたものはこちらになります。

説明は以上になります。

他にも車両の脱輪とかいろんな再現に使用できると思うので、

色々試してみて下さい。

・目次に戻る

最後に

見ていただきありがとうございました。

コンストレイントは色々な物理的な動作だったり、

ケーブルコンポーネントとの連携など、

今後も紹介出来たら紹介したいと思います。

・目次に戻る