今回はPhysic Materialを使ってゲームオブジェクト同士が衝突した時の跳ね返り等の設定をしてみます。
Physic Materialを使うと氷の床、ザラザラで物が滑らないような床という風にする事が出来ます。
Physic Materialは
↑のようにゲームオブジェクトに設定したコライダに設定します。
Physic Materialの作成
Physic MaterialはProjectのAssetsフォルダで右クリック→Create→Physic Materialで作成出来ます。
作成したPhysic Materialを選択すると↑のようにインスペクタに表示されます。
Dynamic Frictionは移動中に衝突した時の摩擦で、0は摩擦なし、1は摩擦が最大で働きます。
Static Frictionは動いていない時に衝突した時の摩擦で、値はDynamic Frictionと同じです。
Bouncinessは跳ね返りの係数で0は跳ね返りがなく、1は力が落ちることなく跳ね返ります。
Friction Combineは衝突したオブジェクト同士の摩擦の設定で、
Averageは両方の平均
Minimumは小さい方で計算
Maxmamuは大きい方で計算
Multiplyは両方をかけて計算
になります。
Bounce Combineは衝突したオブジェクト同士の跳ね返りの設定でFriction Combineと同じです。
文章を読むより実際のサンプルを見た方が早いと思いますので、見ていきましょう。
まずは二つのPhysic Materialを作成し、名前をFrictionCube1とFrictionCube2とします。
それぞれの設定値は↑のようにしました。
FrictionCube1は床用でFrictionCube2は上から床に落とすゲームオブジェクトに設定します。
FrictionCube1では動的、静的に摩擦が0.5働くようにします。
FrictionCube2では摩擦を無くしツルツル滑る氷のように設定しました。
ヒエラルキー上に↑のように二つのCubeを作成し、名前をFrictionCube1、FrictionCube2とします。
FrictionCube1のインスペクタは↑のようになります。
Box ColliderにPhysic MaterialのFrictionCube1をドラッグ&ドロップしています。
MeshRendererのMaterialsのElement0に床用のマテリアルを設定して、落とす物体と見た目の違いを出しています。
FrictionCube2のインスペクタは↑のようになります。
Box ColliderにはPhysic MaterialのFrictionCube2を設定します。
こちらは上から落とす物体になり、自動で落下させたいのでRigidbodyを取りつけUse Gravityにチェックを入れます。
FrictionCube1とFrictionCube2は↑のようになります。
FrictionCube1が斜めの床で、FrictionCube2は四角い落とす物体ですね。
Physic Materialの効果を確認する
それでは実行してみましょう。
↑のように落下した物体は床を滑らかに滑っていき平らな床の上でも氷のようにすべっています。
それではPhysic MaterialのFrictionCube2の設定を変えてみましょう。
Bouncinessを1、Bounce CombineをMaximumにして再度実行してみます。
↑のように落下後にものすごくピョンピョン跳ねてますね!
スーパーボールのようです。
一度飛び跳ねるとなかなか止まりません。
Rigidbodyの空気抵抗を使って物体を止める
落とす物体FrictionCube2に取りつけているRigidbodyのDragを1、Angular Drugの値を1にしてみましょう。
Dragは物体の力に対する空気抵抗でAngularは物体の回転に対する空気抵抗です。
↑のように一定時間後に完全に静止しました。
最後にFrictionCube1の
Dynamic Frictionを1
Static Frictionを1
Bouncinessを0
Friction CombineをAverage
Bounce CombineをAverage
FrictionCube2の
Dynamic Frictionを0.5
Static Frictionを0.5
Bouncinessを0.5
Friction CombineをAverage
Bounce CombineをAverage
に設定します。
床であるFrictionCube1の摩擦を最大にし、Friction CombineをAverageにした事で落とす物体との平均で摩擦が計算されます。
それではUnityの実行ボタンを押して確認してみましょう。
↑のように床の摩擦が大きい為、物体を落とすとすぐに止まってしまいます。
これでPhysic Materialを使って衝突や跳ね返りの設定をする事が出来るようになりました。
CharactereControllerを使っているキャラクターだと物体の影響を受けないのであれですが、
Rigidbody+コライダでキャラクターを動かしている場合は滑る床といったものも作れますね。
Rigidbody+Capsuleコライダでキャラクターを動かす方法
を参照してください。