UnityユーザーのためのUEブループリント入門
コードとビジュアル両方のスクリプトを比較してゲームエンジンを学びます

4. 物理演算

UnityとUnreal Engineの物理演算について比較してみてみましょう。
  • 物理演算の機能追加
  • 物理的な材質を変えてみる

4. Unityの物理演算

4.1 物理演算機能の追加

Scene上にPlaneを追加してTransformをリセットします。さらにCubeを追加します。位置はPlaneから上に離れたところに置きます。
CubeにRigidbodyコンポーネントを追加します。
Playを実行すると、物理演算が考慮され、Cubeが落下することが確認できます。
CubeにはデフォルトでColliderコンポーネントが追加されています。Colliderコンポーネントを無効化する方法は、コンポーネントを無効にするかコンポーネントを削除します。
Colliderコンポーネントを有効にして、Colliderコンポーネントを3倍に拡大してみます。
Playを実行すると、Colliderコンポーネントを3倍に拡大した状態でPlaneに着地していることが確認できます。
親子関係のときの挙動について
親子関係のときの挙動について確認します。CubeのScaleを1に戻しておきます。Cubeの位置をリセットしておき、Planeを削除します。Rigidbodyコンポーネントを削除しておきます。
もう一つCubeを作成します。このCubeにはRigidbodyコンポーネントを追加します。
また、Cubeの子にSphereを追加して、Cubeに重ならない位置に移動させます。
ShaderはデフォルトのUniversal Render Pipeline/LitでBase MapがBlueのMaterialを作成します。
位置をリセットしたほうのCubeにMaterialを追加します。
Playを実行すると、全ての子オブジェクトを含めて一繋ぎの物体として扱われるのがわかります。
子のSphereのSphere Colliderコンポーネントを無効化します。
Playすると、物理演算は子オブジェクトのColliderコンポーネントを考慮していることがわかります。
親子関係を無視して、子オブジェクトに物理演算を適用させるには、Sphere Colliderコンポーネントを有効化して、子オブジェクトにもRigidbodyコンポーネントを追加します。
Playを実行すると、子オブジェクトに物理演算が働きます。

4.2 物理的な材質を変えてみる

弾むボールを作ります。弾ませるためのPlaneを用意して、SphereをScene上に配置して、SphereにRigidbodyコンポーネントを追加します。
Create > Physics MaterialでPhysics Materialを作成します。名前はBounceにします。Physic Materialは、物体の物理特性を変更するものです。BounceのInspectorでPhysics MaterialのBouncinessを1にします。
Dynamic Friction 動いている状態の摩擦
Static Friction 動いていない状態の摩擦
Bounciness 弾性
Friction Combine 物体間の摩擦処理の仕方 +
Averageは物体A(摩擦0)と物体B(摩擦1)  AとBがこすれると摩擦が0.5かかる
Bounce Combine 物体間の弾性処理の仕方
SphereのSphere ColliderコンポーネントのMaterialにBounceのPhysics Materialを追加します。
Playを実行すると、Sphereがボールのように弾んでいることが確認できます。Floor側はCollisionが何も設定されていないので減衰することも確認できます。
PlaneのMesh ColliderコンポーネントのMaterialにSphereで追加したPhysics Materialと同じものを追加します。
Playを実行すると、力が減衰しないBallの物理演算を与えたSphereができます。

4. UEの物理演算

4.1 物理演算の機能追加

UEにも物理演算機能があります。
Place ActorsからCubeを選択します。
ドラッグしてからレベル上にドロップします。Floorから上に離れたところに置きます。
Cubeのワールドアウトライナの詳細パネルからPhysicsを表示して、Simulate Physicsをチェックします。
Playを実行すると、物理演算が考慮され、Cubeが落下することが確認できます。
Unityで言うところのColliderは、UEではCollisionという名前になります。
Collisionを無効化する方法は、詳細パネルのCollisionのCollision Presetsのリストから、「NoCollision」を選択します。
Collision Presetsのリストは「Default」に戻しておきます。
UnityのようにCollisionを拡大してみます。対象のCubeの詳細パネルから、Box Collisionコンポーネントを追加します。
Unityと同じように、3倍拡大します。
Playを実行すると、Box Collisionを追加した場合、Unityとは異なりすり抜ける挙動になることが確認できます。
これは、Box Collisionの詳細パネルのCollisionのCollision Presetsのデフォルトが「OverlapAllDynamic」になっているためです。
UnityのようにCollisionがPlaneに着地したような動きにするには、Box Collisionを選択してから、Collision Presetsを「BlockAllDynamic」に変えるとUnityと同じ挙動になります。
親子関係のときの挙動について
親子関係をつくるには、アクターを作成する必要があります。コンテンツブラウザで右クリック > Blueprint Class をクリックします。
アクターを選択します。
作成したアクターをダブルクリックします。
Add ComponentでCubeを検索します。
続けてCubeを選択した状態で、Add ComponentにSphereを追加します。
CubeとSphereが重なっている状態なので、Sphereを選択してy軸に移動します。
Unityで設定した内容と同じように、親のCubeの詳細パネルにある、PhysicsのSimulate Physicsをオフにして、子のSphereの詳細パネルにある、PhysicsのSimulate Physicsはオンにします。
実験のためFloorは削除して、下のCubeの色を変えます。
Playを実行すると、Unityと同じように、全ての子オブジェクトを含めて一繋ぎの物体として扱われるのがわかります。
子のSphereのCollisionをNo Collisionに変更します。
Playすると、Unityと同じように、Physicsは子オブジェクトのCollisionを考慮していることがわかります。
親子関係を無視して、子オブジェクトに物理演算を適用させるには、子オブジェクトにもPhysicsをオンにします。
Playを実行すると、Unityと同じように、子オブジェクトに物理演算が働きます。
親オブジェクトのCollisionと子オブジェクトのCollisionの設定が異なると以下のようなメッセージが出力されていますので注意してください。
また、UnityのようにPhysicsプロパティやCollisionプロパティを削除することはできません。

4.2 物理的な材質を変えてみる

Unityと同じように弾むボールを作ります。
図のようにSphereをレベル上に配置して、Physicsをオンにします。
UEでもPhysics Materialが作れます。
コンテンツブラウザ上で右クリック > Physics > Physics Materialを選択します。
Pick Physical Material Classというウィンドウが表示されます。
Physics Materialを選択してSelectを押します。
Physics Materialがコンテンツブラウザ上に作成されます。
Physics Materialをダブルクリックします。
🔗 参考リンク
Unreal Engineデベロッパードキュメント
物理マテリアルのリファレンス

Friction

サーフェスの摩擦値です

Static Friction

※UEのバージョンによってはこの項目がない場合があります

Override Friction Combine Mode

接触している物理マテリアル間でどのように摩擦が組み合わされるかを変更することができます

Restitution

サーフェスがどの程度「弾む」かを表します

Restitution Combine Mode

物理マテリアルの反発をどのように組み合わせるかを調整します
Sphereをボールのように弾む物理演算を与えます。
以下のようにUnityと同じPhysics Materialを作成します。名前はBallにします。
Sphereを選択して、詳細パネルのCollisionにあるPhys Material Overrideに、作成してBallのPhysics Materialを選択します。
Playを実行すると、Sphereがボールのように弾んでいることが確認できます。Floor側はCollisionが何も設定されていないので減衰することも確認できます。
また、ワールドアウトライナからFloorを選択して、詳細パネルのCollisionにあるPhys Material Overrideに、Sphereと同じBallのPhysics Materialを選択します。
Playを実行すると、Unityと同じく、力が減衰しないBallの物理演算を与えたSphereができます。
🔗 参考リンク
Qiita
Unreal Engine 4.24 でアクターに初速を与えたり、力を加えたりする