PhysicMaterialを使ってみよう

概要

最終更新日:2020/03/09

Unityの機能の一つであるPhysicMaterialについて書いた記事です。
主に次の項目に該当する方に向けて書いています。
  • PhysicMaterialとは何か知りたい
  • PhysicMaterial作り方から使い方まで知りたい
  • Bouncinessの効果を知りたい
  • Static Frictionの効果を知りたい
  • Dynamic Frictionの効果を知りたい
  • Combineの効果を知りたい

サンプル

サンプルはここからダウンロードできます。
環境については以下の内容となっています。

開発環境
Unityのバージョン Unity 2019.19f1



PhysicMaterialとは

PysicMaterialとはゲームオブジェクトに材質の情報を付与する機能です。
この情報は物理計算処理で使用されます。
これによって、ゲームオブジェクトをゴムのように跳ねさせたり、
氷の上のように滑らせたりできます。

この項目で使用するサンプルシーンの実験用は「Experience」で
完成版は「PhysicMaterialExperience」です。
次の項目からはExperienceが開かれていることを前提に書いています。

前提条件

PysicMaterialはゲームオブジェクトに対してColliderとRigidbodyの設定が
終わっていることが前提です。

unity_beginner_0142

設定方法や各機能の事を知らない方はColliderはこちら、
Rigidbodyはこちらで書いているので、確認をお願いします。

作成方法

PyasicMaterialは通常のMaterialと同じように以下の手順で作成できます。
  1. 上段メニュー or ProjectViewのAssetsをクリック
  2. 表示されたメニューのCreateを選択
  3. 更に表示されたメニューのPhysicMaterialを選択
unity_beginner_0137

設定方法

作成したPhysicMaterialの設定先はColliderの「Material」項目です。
直接D&Dする方法と、項目の右側の「◎」をクリックして選択する方法がありますが
まずは、HierarchyのBallにPhysicMaterialを設定してInspectorに表示してください。

直接D&D

直接D&Dはマテリアルを選択してPhysicMaterialの項目にD&Dします。

unity_beginner_0139

◎から指定

PhysicMaterialの右側にある◎をクリックすると新しいウィンドウが開くので、
その中から設定するマテリアルを選択します。

unity_beginner_0138

実行してみる

PysicMaterialを指定したら実際に動かしてみてください。
Ballが落下して床に当たっても、特に跳ね返ったりすることはなく終わります。



これはこの後説明する跳ね返りの設定がされていないからです。
PysicMaterialはRigidbodyのように設定するだけで効果が出ないことがあります。

できること

PhysicMaterialでは以下のことができます。
  • 衝突した時に跳ね返る
  • 衝突した際に摩擦の影響を与えることが出来る
これらの内容の説明は各検証項目で行います。

跳ね返り検証

ここからはPhysicMaterialの跳ね返りの検証を行います。
PysicMaterialには跳ね返りを調整する以下の設定項目があります。

unity_beginner_0140
  • Bounciness:跳ね返り度合い
    0~1で設定し0に近いほど跳ね返らず、1に近いほど跳ね返る

  • Bounce Combine:跳ね返り計算方法
    Average:二つのオブジェクトのBouncinessの平均を使用する
    Minimum:二つのオブジェクトでBouncinessが小さい方を使用する
    Maximum:二つのオブジェクトでBouncinessが大きい方を使用する
    Multiply:二つのオブジェクトのBouncinessを乗算(掛け算)した値を使用する

Bounciness

Bouncinessは跳ね返りの度合いで0~1までを設定できます。
0に近いほど跳ねなくなり、1に近いほどよく跳ねます。
検証はサンプルシーンの「BouncinessExperience01」を使って行います。
使用しているPhysicMaterialは「BouncinessMat01」と「BouncinessMat02」です。



上の動画では左のボールのBouncinessが0.3、右が0.8です。
値が大きい右の方が長く跳ね続けているのが分かります。
このようにBouncinessで跳ねる力の設定ができます。

Bounce Combine

Bounce CombineはBouncinessの計算方法を決める設定です。
検証はサンプルシーンの「BouncinessExperience02」を使って行います。
使用しているPhysicMaterialは次の四種類です。
  • AvarageMat
  • MinimumMat
  • MaximumMat
  • MultiplyMat
以下は各設定毎の一度目の衝突時のボール側の係数の計算例です。

種類(ボール側) 計算式 結果
0.8 0.3 Avarage (0.8 + 0.3) / 2 0.55
0.8 0.3 Minimum ボール < 床 ? ボール : 床 0.3
0.8 0.3 Maximum ボール > 床 ? ボール : 床 0.8
0.8 0.3 Multiply 0.8 * 0.3 0.24
上の動画は左からAvarage、Minimum、Maximum、Multiplyの設定をしています。 この動画で分かるようにBounce Combineによって跳ね返りの挙動が変化するので、 ゲームオブジェクトに適切な素材(ゴムなど)の設定を行うことで、 リアルな挙動が実現できます。

摩擦検証

次はPhysicMaterialの摩擦の検証を行います。
PysicMaterialには摩擦を調整する以下の設定項目があります。

unity_beginner_0141
  • Dynamic Friction:
    移動中のオブジェクトで使用される摩擦の大きさを表す値
    0~1で設定し、0に近いほど摩擦なくなるので、滑るようになり、
    1に近いほど摩擦が起きるので滑らなくなる

  • Static Friction:静止中のオブジェクトで使用される摩擦の大きさを表す値
    数値と効果はDynamic Frictionと同じ

  • Friction Combine:摩擦計算方法
    Average:二つのオブジェクトのFrictionの平均を使用する
    Minimum:二つのオブジェクトでFrictionが小さい方を使用する
    Maximum:二つのオブジェクトでFrictionが多きい方を使用する
    Multiply:二つのオブジェクトのFrictionを乗算(掛け算)した値を使用する

Dynamic FrictionとStatic Friction

摩擦設定にはDynamic FrictionStatic Frictionがあります。
これは移動中と静止中の摩擦の大きさを表す値になっていて、
Dynamicが移動中、Staticが静止中です。
検証はサンプルシーンの「FrictionExperience01」を使って行います。
使用しているPhysicMaterialは「FrictionMat」です。

まず、PhysicMaterialを以下の値にしてFirctionの検証してみます。
Dynamicの値を0にして摩擦をなくし、氷のような材質として扱いますが、
Staticの値は1にしているので摩擦が最大限になっています。

Frictionの種類 摩擦値
Dynamic Friction 0
Static Friction 1
上の動画でブロックは実行してから全く動きません。 その後、ゲージをためた力で押してみるとそこからは滑るように移動しています。 これはStaticの値が最大値になっているため、傾斜になっていたとしても 摩擦が強すぎて動かくなっており、そこに力を加えて動きだすと Dynamicが最小値なので、摩擦が限りなくない氷の上を移動することと 同じように移動しています。 次は以下の値で検証します。 先ほどとは逆でDynamicの値を1、Staticを0にしています。
Frictionの種類 摩擦値
Dynamic Friction 1
Static Friction 0
動画で分かるようにStaticを0にして摩擦をなくしても動きません。 これは、静止中の場合に傾斜によって移動しようとしますが、 動作中の摩擦が1で最大のため、すぐに停止してしまうからです。 最後の検証です。 DynamicとStaticの値を0.5にしてみます。
Frictionの種類 摩擦値
Dynamic Friction 0.5
Static Friction 0.5
今までのような極端な設定ではなく、バランスをとった設定にしたところ、 傾斜の動きとしては自然に近い形になりました。 このようにStaticとDynamicを組み合わせることで、 ゲームオブジェクトの挙動のバリエーションを増やすことが出来ます。

Friction Combine

Friction Combineは摩擦の計算方法を決める設定です。
計算方法の種類と内容はBounce Combineと同じです。
検証はサンプルシーンの「FrictionExperience02」を使って行います。
使用しているPhysicMaterialは次の四種類です。
  • AvarageMat
  • MinimumMat
  • MaximumMat
  • MultiplyMat

次の動画は左からAvarage、Minimum、Maximum、Multiplyの設定をしており、
ボールのFrictionの値も全て同じ値を使用しています。

Frictionの種類 摩擦値
Dynamic Friction 1.0
Static Friction 0.3
Frictionを使用すると傾斜で滑ったり、氷の上を移動しているような 止まらない床を作ったりすることができます。 その際にStatic、Dynamicの値、そしてFriction Combineを組み合わせることで、 自分達の求めている演出に近い表現ができるようになります。

まとめ


  • PhysicMaterialはゲームオブジェクトに材質の情報付与する
  • Bouncinessは跳ね返りの大きさ設定
  • Static Frictionは静止中の摩擦設定
  • Dynamic Frictionは動作中の摩擦設定
  • Combineは跳ね返りや摩擦の計算処理の種類
    Average:平均
    Minimum:最小値使用
    Maximum:最大値使用
    Multiply:乗算(掛け算)