当たり判定
出典: フリー百科事典『ウィキペディア(Wikipedia)』
当たり判定(あたりはんてい、Collision Detection)はシューティングゲームや対戦型格闘ゲームなどのアクションゲームにおいて、攻撃などが対象物に命中したかどうかを判定するプログラム処理のこと。またゲーム愛好家やゲーム雑誌の記事においては、攻撃が命中したと判定される範囲を当たり判定と呼ぶことがある (このショットは当たり判定が大きい、など)。
画面上のキャラクター(スプライト表示)とは別に存在し、特定の場所に攻撃判定が重なることで初めて処理が行われる。
当たり判定が存在しない状態を『無敵』と呼ぶ。
目次 |
[編集] 具体的な判定方法
[編集] 同じ図形どうしの判定
[編集] 矩形
矩形を点(x, y) と幅・高さ(lx, ly) で表す。ふたつの矩形A・矩形B について当たり判定を行うには、以下の条件が成り立っているかどうかを調べる。成り立てば当たり、そうでなければ外れと判定できる。
[編集] AABB
矩形を3次元に拡張したものを AABB (Axis Aligned Bounding Box, 軸に並行な直方体) と呼ぶ。2次元の矩形は左上の点とそこから右下までの長さで表すのが一般的なのに対して、AABBでは直方体の中心座標とxyz軸方向に±何mの広がり(半径のようなもの)、という表し方をすることが多い。AABBの中心(x,y,z), 大きさ(rx,ry,rz) とすると、このAABBは x方向については x-rx ~ x+rx, y方向には y-ry ~ y+ry, z方向には z-rz ~ z+rz の範囲を占める。AABBの当たり判定は以下のようになる。
AABBは大雑把な当たり判定や可視判定で使われることがある。
[編集] 円、球
円を中心(x,y)、半径 r で表すと、二つの円 A, B が当たっていることは「Aの中心とBの中心の距離が、Aの半径とBの半径の和以下である」ことと同値であるから、円どうしの当たり判定は
これを3次元に拡張すると、球と球の当たり判定を行うことができる。
- 複雑な形状の当たり判定を行うとき、複数の球を組み合わせて近似的に判定することもできる。ただしこの方法はセガの特許なので注意。
[編集] 動く球
- 動く球は、移動開始時の中心・速度ベクトル・半径、で表す。
- 両方の球が静止していれば→球の当たり判定を使う
- 2つの球が同じ速度→球の当たり判定を使う
- 0 < t < 1 なる媒介変数 t を使って、球Aの中心は (A0 + t Va), 球Bの中心は (B0 + t Vb) と表せる。このように動いていく球A・球Bの中心どうしの距離が、半径の和以下になるような時刻 t が存在するか? を求める。