執筆バージョン: Unreal Engine 5.2
|
こんにちは!
今回はフィジックスを使って揺れものを作成したいと思います。
動かすのはこんな感じのおばけのモデルを動かしてみます。

1.まずインポートします。
2.次にSkeletal Meshを右クリック→Create→Physics Asset→Create and Assignを選択、Create AssetでPhysics Assetを作成、アサインします。

3.Physics Assetを開くと以下のような画面になります。

4.一旦自動生成されたコリジョンは使いにくいので削除してしまいます。
(これは好みなので使える場合はそのまま使って頂いてもかまいません。
5.次にジョイントを表示します。真ん中上の「Character→Bones→All Hierachy」からビューにジョイントが表示されます。


6.左側のSkeleton Treeウィンドウから「歯車→Show All Bones」でツリーが表示されます。


7.Skeleton TreeのJointを選択し、「右クリック → Add Shape → Add Capsule」よりコリジョンを入れます。
モデルの形でSphere、Capsule、Box、Tapered Capsule(片側をすぼめることができるCapsule)を選べます。よく使われるのはCapsuleが多いと思います。今回もCapsuleを選びました。
ショートカットがそれぞれ(Ctrl+1~4)で設定されています。


8.次にこのCapsuleの位置、向き、サイズを移動、回転、スケールで整えます。

9.Capsule内の設定をします。
■Physics→Physics Type:
・Kinematics …動かない箇所、物理衝突を判定する箇所。
・Simulated …物理シミュレーションを行う箇所。
10.他の箇所もCapsuleコリジョンを作成します。同じ構成の箇所は全部選んで作成すると速いです。


11.コリジョンの設定はコピーできるので、先程設定したコリジョンを選択し、Ctrl+c、今作成されたコリジョンを選択した状態でCtrl+Vで以下のように貼り付けできます。

12.それぞれのコリジョンは作成できました。次にそれぞれのコリジョンをコンストレイントしてあげることで、布やしっぽのようなつながっているもののシミュレーションができるようになります。
コリジョンを選択、「右クリック→Constraints→子のコリジョン(ここではSkirt_F_2)」でConstraintを作成します。

13.Constraintを設定します。
主な調整箇所は以下の2箇所です。
■回転角の制御
Angular Limits/Swing 1 Motion …Limitedにすることで回転角を制御できます。(ローカルxy平面方向)
Angular Limits/Swing 2 Motion …Limitedにすることで回転角を制御できます。(ローカルxz平面方向)
Angular Limits/Twist Motion …ひねりの回転角です。(ローカルx軸回転方向)
下図のように回転角は赤で移動範囲、ひねりは緑で示されます。


■Angular Motor
Angular Drive Mode:SLERP
Drives:対応した箇所に☑を入れます。(SLERP☑)
・Target Orientation(狙いの角度)
Strengthを強くすると指定した角度に強く戻るようになります。
・Target Velocity(戻りの速さ)
Strengthを強くすると指定した角度に強く戻るようになります。
14.他の箇所もConstraintを作成します。(これは手作業で手順12をしていく必要があります。)Constraintの設定はコピーできるので、全部作成したら左下のGraphウィンドウから黄色い四角のConstraintを選択し、Ctrl+c、Ctrl+vで設定を一括コピペすると速いと思います。ちゃんとできているかの判断はわかりにくいですが、設定を変えていればConstraintの赤いコーンの形状が変わるので設定が適用されているか目視できます。

15.対象のコリジョンを全て選択し、「Enable Collision」を押します。これで衝突が認識されるようになります。(UE公式のドキュメントだとこの記述が抜けてますが、ここがないと認識されず衝突が起きません…! )

16.確認の際はアニメーションBPを作成、適当なアニメーションを右下のAsset Browserからドラッグアンドドロップしつなぎます。

間にRigidBodyノードを入れてOverride PhysicsAssetにさきほど作成したPhysics Assetを入れます。
Details→Sim Space Settings→World Alpha:1.0で外からの影響を受けるようになります。(ローカルのみで影響が閉じる場合には0.0のままで問題ありません。)

Skeletal MeshのAsset DetailsでPostprocessマテリアルで作成したアニメーションBPを指定すると、
Physics Asset内で右下の緑のボタンで動作が確認できます。(Enableでアニメーション開始、Disableでアニメーション終了)

17.できました!このようにPhysicsでコリジョンが設定できます。他にも色々設定項目があるので、色々試して遊んでみてください!!
※なお、16のあとに手にもコリジョンを入れています。右手はDetailsウィンドウ:Collision→Collision Response:Disabled、左手はEnableとしています。そのためコリジョンの反応の有無が確認できています。
■参考記事
EpicGames DevCommunityページ
https://dev.epicgames.com/community/learning/tutorials/dLxx/unreal-engine-rban-echo-ponytail-tutorial
alwei様ブログページ
https://unrealengine.hatenablog.com/entry/2022/10/31/200107