ひとことで
物体同士が触れたときに、どれだけ滑りにくいか(摩擦係数)と、どれだけ跳ね返るか(反発係数)を決める 2 つの値です。氷の床でつるつる滑る、ゴムの靴で急な坂に立てる、スーパーボールが高く跳ねる、粘土がべちゃっと止まる、といった手ざわりの違いは、ほとんどこの 2 つの数値で作られます。
ゲームでの使いどころ
- 床の種類:氷、泥、砂、金属など、足場ごとに摩擦を変えると、同じ操作でも滑り方が変わり、ステージの特徴になります。
- 物の性質:木箱、ゴムボール、鉄球の転がり方・止まり方の違い。
- 乗り物:タイヤの摩擦(グリップ)は、ドリフトやスリップの表現の中心です。レースゲームではさらに複雑なタイヤモデルを使います。
- ゲームの手ざわり:ピンボールの跳ね方、ビリヤードの球の反射、アクションゲームで壁に当たったときの跳ね返り。
しくみ
摩擦(クーロン摩擦)
床に置いた物を押すと、ある大きさまでは動かず(静止摩擦)、それを超えると滑り出し、滑っている間は一定の力でブレーキがかかります(動摩擦)。
は面を押し付ける力(垂直抗力)、 は静止摩擦係数、 は動摩擦係数で、ふつう です(動き出すと少し軽くなる)。
坂道に置いた物は、坂を下る力 が静止摩擦の上限 を超えたとき、つまり
のときに滑り出します。摩擦係数 0.5 の物は、約 27° より急な坂で滑ります。
反発係数
ぶつかる前後の、面に垂直な方向の速さの比です。
なら速さを失わずに跳ね返り、 なら跳ね返らずにその場で止まります。跳ね上がる高さは速さの 2 乗に比例するので、跳ね返りの高さは 倍になります( なら約半分の高さ)。
2 つの物体の係数を組み合わせる
摩擦や反発は本来「2 つの物の組み合わせ」で決まる値ですが、ゲームでは物ごとに値を持たせ、ぶつかったときに組み合わせます。Unity の PhysicMaterial では「平均・最小・最大・掛け算」から選べ、PhysX や Box2D でも同様の設定があります(Box2D の摩擦は既定で幾何平均 、反発は大きい方)。
実装のポイント
- 小さな跳ね返りは止める:床の上で反発係数どおりに跳ね続けると、細かく震えて止まりません。速さがしきい値以下なら反発を 0 にします(スリープ)。
- 静止摩擦を正しく扱う:動摩擦だけで作ると、坂の上の物が少しずつずり落ちます。物理エンジンは、接線方向の速度を 0 にしようとする拘束として摩擦を解き、その大きさを で制限する形で静止摩擦を実現しています。
- キャラクターは別扱いが多い:プレイヤーキャラクターを物理エンジンの摩擦に任せると、坂で滑ったり止まり方が操作しづらくなります。キャラクターコントローラーでは、摩擦を使わず加速・減速を直接調整するのが一般的です。
つまずきやすい点
- 摩擦係数は 1 を超えてもよい:ゴムとアスファルトのように、1 を超える組み合わせもあります(45° より急な坂でも止まれる)。
- 反発係数 1 でも少しずつ減る・増える:時間刻みや衝突の検出のずれで、完全な弾性衝突でもエネルギーが微妙に変わります。ピンボールのように正確さが必要な場面では、跳ね返りの速さを明示的に設定します。
- 組み合わせ方の違いに注意:「掛け算」は 2 つとも小さいとほぼ 0 になり、「平均」は氷とゴムの組み合わせが中途半端な値になります。ゲームの意図に合わせて選びます。
デモで試すこと
- 左の坂では、氷の箱はすぐに滑り出し、木の箱は坂がある角度を超えると滑り、ゴムの箱はかなり急でも止まったままです。「坂の角度」を少しずつ上げて、それぞれが滑り出す角度を確かめてください(左下に木の目安が出ます)。
- 箱の青い矢印は坂を下る重力の成分、赤い矢印は摩擦力です。止まっている間は、赤が青と同じ大きさで打ち消しています(静止摩擦)。
- 右のボールは、粘土・テニスボール・スーパーボールです。横の短い線が直前に跳ね上がった高さです。「床の反発係数」を下げると、どのボールも跳ねにくくなります。
- 「係数の組み合わせ方」を「小さい方」にすると、スーパーボールでも床の反発係数までしか跳ねなくなり、「大きい方」にすると、粘土まで跳ねるようになります。