
ゲームを作りたいけど、物理演算って複雑そう…

そんなことはないよ!
Unityでは複雑な数式なしに実現できるよ。
自由落下するボールが地面に当たって跳ね返るという物理演算をやってみよう。
▼完成イメージ▼
以下の流れで作業を進めていきます。
- Projectを開く
- オブジェクト[Plane] と[Sphere]を配置
- オブジェクト[Plane] と[Sphere]に色を追加
- オブジェクト[Sphere]に[Rigidbody]を追加
- オブジェクト[Sphere]に[Physical Material]を追加
下準備
まずは、ここまでやっていきます。
- Projectを開く
- オブジェクト[Plane] と[Sphere]を配置
- オブジェクト[Plane] と[Sphere]に色を追加
▼ここでの操作方法に不安のある方は、こちらをご参照ください▼
完成イメージは以下のようになります。(具体的なパラメータは以下で解説)

オブジェクトの配置
解説画面と合わせるために、以下のように各オブジェクトの配置や名前を変更していきます。
[Plane]は、オブジェクト名を[Stage]に変更し、[Transform]を以下のように変更します。

同じく[Sphere]は、オブジェクト名を[Football]に変更し、[Transform]を以下のように変更します。

Rigidbodyの追加
物理法則に従って動作させるために、Rigidbodyを追加します。
Hierarchyウインドウで、[Football]を選択し、Inspectorウインドウの[Add Component]をクリックし、[Physics]>[Rigidbody]の順にクリックします。


Inspectorウインドウに[Rigidbody]が追加されていれば完了です。

これで、重力の影響を受けるようになります。
Physical Materialの追加
オブジェクト同士が接触した際の摩擦や反発といった物理挙動を設定するMaterialを追加します。
Projectyウインドウ下の[+]を選択し、[Physical Material]をクリックします。

名前を[Football_PhysicalMaterial]に変更します。
InspectorウインドウにPhysical Materialが追加されます。
ボールが地面と接触時に跳ね返るように、反発係数となる[Bounciness]を1に変更します。

[Bounciness]0:全く跳ねない、1:衝突した力そのまま跳ね上がる)
オブジェクト[Football]に[Physical Material]を設定します。
Hierarchyウインドウの[Football]を選択し、Inspectorウインドウの[Sphere Collider]>[Material]に、ProjectウインドウのPhysical Material[Football_PhysicalMaterial]をドラッグして離します。

動作確認
[▶︎]ゲームプレイをクリックします。
ボールが地面と接触して、跳ね返っています。(非完全弾性衝突)
跳ね返り方の変更
ボールが地面と接触時に跳ね返り方を変更します。
ProjectウインドウのPhysical Material[Football_PhysicalMaterial]を選択し、Inspectorウインドウの[Bounce Combine]をプルダウンメニューから[Maximum]に変更します。

[Maximum]接触するオブジェクトのうち、反発係数が大きい方を適用
動作確認
[▶︎]ゲームプレイをクリックします。
落下時の高さまで跳ね返っています。(完全弾性衝突)
Physical Material用語集
今回紹介できなかった項目についても解説しています。困った時にご参照ください。
以上で、自由落下と反発係数は終了です。お疲れ様でした。