Constraintを紹介します!
今回はConstraintを使用して、
物理的な動きや物理的な接続を切ったりしてみようと思います。
Constraintを使用することで下記の動作を作れたりします。
PhysicsConstraintを使ってみる
まずPhysicsConstraintは何が出来るのかを説明していきます。
PhysicsConstraintでは揺れるものや力を加えたら解除されるなどの、
物理的な動きを再現したりする場合に使用します。
下記動画のように武器を接続して動きに合わせて揺らして、
よりリアルに見せたりすることに使ったりもします。
それでは実際にPhysicsConstraintを使い簡易扉のようなものを作ってみます。
まず柱となる部分のモデルと扉となる部分のモデル配置します。
今回は簡易扉なのでサードパーソンテンプレートにある、
SM_CubeとSM_Cylinderを使用します。
配置が完了したら扉側のモデルとなるSM_Cubeの設定を変更します。
物理動作を行えるようにするために、
トランスフォームの可動性をムーババブルに変更して、
SimulationPhysicsをオンにします。
そちらが完了したら、SM_Cylinderの方にPhysicsConstraintを追加します。
追加が完了したら各種設定を行います。
まず何と何を接続させるか指定するために、
ConstraintActor1、ConstraintActor2の各Actorを指定します。
※ちなみにボーンを指定して動かしたりすることも可能です。
動かした場合の例が以前ツイートしたこちらになります。
ブログ用の記事の処理作ってたら、
— よしかた@アルゴンブログ (@yoshikata_game) 2022年11月13日
色々大変なことになったw
まあこんな時時もありますわ(^~^) pic.twitter.com/osdW5MHUzg
続いて今回は扉の回転をしてほしいだけで、
扉と柱の動きは固定しておきたいので、
LinearLimitsをすべてLockedに設定します。
位置の固定が完了したら、今度は角度の指定も行います。
こちらは曲がりすぎたりしないようにするために設定します。
この場合はポール側から接続しているものの回転域を固定します。
最後に扉を開いた後に元に戻るような、
動作をつけるための設定をします。
角度モーターという項目でどの角度でどのスピードで戻るか指定します。
これで簡易的な扉は完成です。
ただこれだけだと反対に扉が無い状態になってしまうので、
反対側にも同じものをコピーして配置してあげます。
Altキーを押しながらドラッグするだけでコピーできます。
文字だと分かりづらいので動画にしてみました。
実際に動かしたものはこちらになります。
簡易扉を通過した後、元に戻るかと思います。
他にも参考動画のように車輪の設定をしたりも出来ます。
各種パラメーターの説明も必要かなと思ったのですが、
私が説明するよりも公式のリファレンスの方が分かりやすいので、
こちらをご参考にしていただければよいのかなと思いました。
Constraintを解除してboneの接続を切る
つづいてはゲームでよくある腕が取れたりする演出を、
BreakConstraint関数で表現することが可能な場合もあります。
ちなみにスケルタルメッシュと付随して、
物理アセットというものがありますが、
この中でもコンストレイントが設定されており、
接続や角度の制限などを指定していたりします。
このコンストレイントの接続を解除することで、
腕が取れたような演出をさせることが可能になっています。
※ただしグレイマンのようなきれいに接続部分が分割されている場合に限ります。
UE5で追加されたMannyやQuinnではモデルが結合してしまっているため、
コンストレイントを解除してもメッシュ部分が伸びてしまいます。
グレイマンも足先や頭など伸びてしまう部分があるので注意してください。
下記のチュートリアルで細かく説明されています。
今回は上記の仕組みを実装します。
まずインプット系のイベントを追加します。
プロジェクト設定のインプットでアクションマッピングから追加します。
今回はGキーを使用しています。
続いてライントレースを飛ばすための開始地点で、
ソケットを使用しているのでソケットを追加してあげます。
hand_rにソケットを追加してhand_r_socketが追加されています。
それでは実際にBPに組み込んでいきます。
実装に必要なイベントグラフや関数変数を紹介します。
・インプットアクション → 入力した際にレイトレースを行う。
・BoneBreakConstraitn → 当たったボーンの接続解除を行う。
・SwitchBoneName → ボーン名から外したいボーンを指定する関数。
・As Skeletal Mesh Component → 例が当たったスケルタルメッシュ変数。
上記追加した内容を元に実装していきます。
まずはインプットアクションですが実装内容は下記になります。
スケルタルメッシュの場合は接続を外す処理になります。
接続を解除する処理になります。
上記画像のSwitchBoneName関数の中身の処理になります。
最後にbodyが分離された場合にラグドール化する処理になります。
以上が動作の処理になります。
実際に動作させたものはこちらになります。
説明は以上になります。
他にも車両の脱輪とかいろんな再現に使用できると思うので、
色々試してみて下さい。
最後に
見ていただきありがとうございました。
コンストレイントは色々な物理的な動作だったり、
ケーブルコンポーネントとの連携など、
今後も紹介出来たら紹介したいと思います。