見出し画像

Unity Physics 入門

DOTSの物理シミュレーション「Unity Physics」を試してみます。

・Unity 2019.4.5f1
・Entities 0.11.1
・Hybrid Renderer 0.5.2
・Unity Physics 0.4.0

1. パッケージのインストール

パッケージのインストール手順は、次のとおりです。

(1) メニュー「Window → Package Manager」でPackage Managerを開く。
(2) ウィンドウ上部の「Advances → show preview packages」をチェック。
(3) 「Unity Physics」(0.4.0)を検索してインストール。
(3) 「Hybrid Renderer」(0.5.2)を検索してインストール。

これによって、「Entities」が依存関係として追加され、依存する関連パッケージ(Burst、Collections、Jobs、Mathematicsなど)が再帰的に追加されます。

2. 床の生成

はじめに、「床」を生成します。「床」は「静的ボディ」です。

(1) Hierarchyウィンドウで「+ → 3D Object→ Cube」で「Cube」を追加。
(2) 「Cube」のTransformを次のように設定。

Position = (0, 0, 0)
Rotation = (0, 0, 0)
Scale = (20, 1, 20)

画像1

(3) 「Cube」に「Convert to Entity」を追加。
シーン開始時に、GameObjectをCubeに変換します。

画像2

(4) 「Box Collider」を削除し、「Physics Shape」を追加。
従来の物理シミュレーション(UnityEngine.Physcs)の「XXX Collider」の代わりに、「Unity Physics」では「Physics Shape」を使います。

画像3

3. 球の生成

次に、床と衝突する「球」を生成します。「球」は「動的ボディ」です。

(1) Hierarchyウィンドウで「+ → 3D Object→ Sphere」で「Sphere」を追加。
(2) 「Sphere」のTransformを次のように設定。

Position = (0, 5, 0)
Rotation = (0, 0, 0)
Scale = (1, 1, 1)

画像4

(3) 「Sphere」に「Convert to Entity」を追加。
(4) 「Sphere Collider」を削除し、「Physics Shape」を追加し、「Shape Type」に「Sphere」を指定。

画像5

(5) 「Sphere」に「Physics Body」を追加し、「Motion Type」に「Dynamic」、「Mass」に「1」を指定。
従来の物理シミュレーション(UnityEngine.Physcs)の「Rigidbody」の代わりに、「Unity Physics」では「Physcs Body」を使います。

画像6

5. 物理シミュレーションの実行

Playボタンで実行すると、「球」は落下し、「床」と衝突します。

画像7

6. マテリアルの設定

「マテリアル」は、ボディが別のボディと衝突した時にどのように反応するかを指定する設定です。

「Unity Physics」の「マテリアル」には、「摩擦」「反発」(弾力性)などの設定があります。「Physics Material Template」アセットに保存したり、「Physics Shape」に直接設定したりできます。

(1) 「Shape」を選択し、「Physics Shape → Material → Restitution」を「1」に設定。
実行すると、「球」は衝突からスタート地点近くまで跳ね返ります。

画像8

(2) 「Shape」を選択し、「Physics Body → Linear Damping」を「0」に設定。
実行すると、「球」はさらに近くなります。

画像9

(3) 「Cube」のTransformを次のように設定。

Rotation = (-2, 0, 0)

床が斜めになり、球が転がるようになります。

7. シェイプの設定

これまで、「Shape Type」に「Box」と「Sphere」を使いました。他にも、次のようなシェイプも利用できます。

・ Sphere : 球。
・ Capsule : カプセル。
・ Plane : 平面。
・ Box : 立方体。
・ Cylinder : 円柱。
・ Convex Hull : 凸包。
・ Mesh : メッシュ。

・Convex Hullの例

画像10

さらに、「Unity Physics」は「複合コライダーシェイプ」をサポートしています。これは、上記シェイプの組み合わせであり、1つの物理ボディとして動作します。この機能は、オブジェクトに複雑なメッシュがある場合に役立ちますが、パフォーマンスを向上させるために、いくつかの単純なコライダーを使用して形状を近似することができます。


この記事が気に入ったらサポートをしてみませんか?