MRが楽しい

MRやVRについて学習したことを書き残す

Unityでオブジェクトの摩擦や跳ね返りの大きさを設定する

本日は Unity の小ネタ枠です。
Unityでオブジェクトの摩擦や跳ね返りの大きさを設定する方法について記事にします。

物理特性マテリアル

オブジェクトの摩擦や跳ね返りの大きさを設定するには物理特性マテリアル(PhysicMaterial)の設定を行います。
docs.unity3d.com

物理特性マテリアルの設定では以下のような設定が可能です。
・移動している物体の摩擦係数
・静止している物体の摩擦係数
・物体の弾性(跳ね返りの大きさ)
・異なる2つのオブジェクトが衝突したときの摩擦
・異なる2つのオブジェクトが衝突したときの弾性

サンプルシーン

以下のようなサンプルシーンを用意しました。
Sphere オブジェクトを Plane オブジェクトに自由落下させて弾性の大きさを変化させてみます。

デフォルトではオブジェクトに物理特性マテリアルは設定されていません。
このとき、シーンを再生してオブジェクトが他のオブジェクトと衝突しても跳ね返りません。

物理特性マテリアルの設定方法

Assets フォルダで右クリックから[Create -> Physic Material]を選択して物理特性マテリアルを作成します。

生成された物理特性マテリアルを選択して Inspector ビューから特性を設定します。
弾性は[Bounciness]で設定します。デフォルト値は 0 です。このとき弾性はなく、全く跳ねない物理特性になります。

[Bounciness]を 1 に設定してみます。1 の場合はエネルギーが減少することなく跳ねます。

実際に物理特性マテリアルを反映して動作を試してみます。
物理特性マテリアルを対象オブジェクトの Collider コンポーネントの[Material]に設定してみます。

これで対象のオブジェクトに物理特性を設定できました。
シーンを再生すると、オブジェクトがオブジェクトと衝突したときに跳ねるようになりました。

衝突時の処理

因みに上記の再生時、エネルギーが減少していないはずなのに同じ高さまで Sphere オブジェクトが戻らないのは[Bounce Combine]の設定が[Average]になっているためです。
このとき、Sphere オブジェクトと Plane オブジェクトの弾性が平均化されています。

[Bounce Combine]の設定を[Maximum]に設定すると、弾性が強い方の値がそのまま反映されます。
このとき、[Bounciness]は 1 が適用されてエネルギーが減少しなくなるため、Sphere オブジェクトは落下開始位置と同じ高さまで跳ね返るようになります。