指を離した瞬間の「ばよん」は、このページで扱う「バネ・ダンパーモデル」そのもの。目標へ引き戻すばねの力と、勢いを削ぐダンパーの力。この2つのせめぎ合いが、機械的な動きに「重さ」を宿らせる。以下、これを部品ごとにばらしていく。
重力・慣性・摩擦の基本式
物体の動きは「位置・速度・加速度」の3つを毎フレーム更新するだけで表現できる。速度に重力加速度を加算し、位置に速度を加算する。摩擦は速度に1未満の係数を掛けて徐々に減衰させるだけで、それらしい質感が出る。難しい物理法則を厳密に解く必要はなく、ゲームでは「見た目として自然かどうか」が優先される。
速度に重力を足し、位置に速度を足し、最後に係数を掛けて減らす。やっていることはこれだけなのに、月面のふわりとした落下も、砂地の鈍い転がりも、数値の匙加減で描き分けられてしまう。
発射点からドラッグ → 離して発射。旗(最長記録)を超えられる角度を探してみて。
狙う角度を変えていくと、飛距離の旗が一番遠くに立つのはある一点——45°。水平方向の等速と垂直方向の落下、直交する2つの動きの積がここで最大になる。低く撃っても高く上げすぎても届かないのは、経験則ではなく式からそう決まっているからだ。
衝突判定の実装パターン
矩形同士なら座標の重なりを見るAABB(軸並行境界ボックス)判定、円同士なら中心間の距離と半径の和を比較する判定が最も軽い。複雑な形状にはこれらを組み合わせた近似で十分なことが多く、厳密な多角形衝突判定はゲームの規模に対して過剰になりがちである。
図形が重なった瞬間の発光を決めているのは、円なら中心間の距離と半径の和、矩形なら座標の重なり(AABB)の判定。派手な当たり判定に見えても、ゲームの多くはこの手の単純な大小比較の積み重ねでできている。
当たったかを判定したら、次は「どう跳ね返すか」。速度のうち壁に垂直な成分(法線成分。v·n は速度と法線の内積で、壁に向かう勢いの大きさを表す)だけを取り出し、反発係数ぶん反転させる——反射後 = v − (1+e)(v·n)n。e=1なら入射角と反射角がぴたり一致し、小さくするほど跳ね返りが鈍る。
バネ・ダンパーモデル
目標値に向かって「ばよん」と揺れながら収束する動きは、バネ(目標との差に比例した力)とダンパー(速度に比例して減衰させる力)を組み合わせて作る。UIのドラッグ操作の「戻り」やキャラクターの追従カメラなど、機械的な動きに「重さ」を持たせたい場面で頻出する。
同じおもりを引いて離しても、減衰cを動かすと戻り方の「性格」がまるで変わる。ζ<1では目標を追い越して何度か揺れ、ζ=1でぴたりと一度で収まり、ζ>1では這うように鈍く戻る。UIの気持ちよさは、このζをどこに置くかの一点にかかっている。
線形補間(指数平滑)は目標へ単調に近づき、決して行き過ぎない。対してバネは勢いを溜め、一度追い越してから戻る。確実に収めたい追従には補間、質感がほしい追従にはバネ、と役割が分かれる。
キャラ操作・UI物理への組込み例
キャラクター操作では、入力キーから直接速度を決めるのではなく「目標速度」を決めてそこへ慣性を持って近づける実装にすると、急停止・急発進のカクつきが消える。UIでもドラッグ終了後に慣性でスクロールが続く「フリック」の実装は同じバネ・ダンパーの考え方の応用である。
入力から目標速度を決め、現在の速度をそこへ慣性で寄せる。すると指を離した後もキャラは一拍滑ってから止まる。加速を鋭くすれば入力に忠実で機械的に、緩めれば重く滑らかに。操作感の印象は、この調整ひとつで大きく動く。
フリックは、ドラッグ終端の速度をそのまま初速にした慣性走行。あとは摩擦で少しずつ減速し、端まで来たらゴムのように引き戻すだけだ。落下で使った「速度に係数を掛けて減らす」式が、スクロールでもそっくり働いている。
最後は「積む順番」の落とし穴。速度の更新に古い位置を使う陽的オイラーはエネルギーが少しずつ増え、軌道が外へ発散していく。先に速度を更新し、その速度で位置を進めるシンプレクティック(半陰的)オイラーなら安定する。dtを上げるほど差は歴然で、式が同じでも積む順序が結果を左右する。