【ウディタ】初心者向けテクニック3(当たり判定)
1.当たり判定
キャラが敵と接触している、
あるいはキャラに攻撃がヒットしている、
などのいわゆる当たり判定は
ゲームではとても大事な要素ですね。
ウディタの場合、マップイベントでは
「プレイヤー接触」
「イベント接触」
を選ぶことができます(図1-1)。
ですが、今回はキャラクターイベントを使わず、
ピクチャによる当たり判定を説明します。
2.当たり判定の考え方
シューティングで考えてみましょう。
丸い自機に、同じく丸い攻撃がヒットしたとします(図2-1)。
この図を見ても分かる通り、
自機と攻撃がちょうど接触する距離というのは、
自機の中心と攻撃の中心までの距離が
互いの半径の合計と同じになる時
なのです(図2-2)。
つまり自機が攻撃と接触しているかどうかは、
下記の式が成立するかどうかで判定できるんですね。
(自機の半径 + 攻撃の半径) >= 自機の中心~攻撃の中心までの距離
「じゃあもし自機の半径が10で、攻撃の半径が20なら……
自機の半径と攻撃の半径の合計は30で、それから……
あれ、自機の中心から攻撃の中心までってどうやって出すんだ?」
3.三平方の定理
三平方の定理というのは、直角三角形に対して
下記の式が成り立つという定理です。
辺(斜めの部分)の二乗 = 底辺の二乗 + 高さの二乗
実は自機と攻撃の中心座標を結び付けると、
ひとつの三角形が姿を現します。
この三角形に三平方の定理をあてはめると、 下記のようになります。
(自機の中心~敵の中心までの距離)の二乗 =
(攻撃x座標 - 自機x座標)の二乗 + (攻撃y座標 - 自機y座標)の二乗
そういえば、自機の中心~敵の中心までの距離が
自機の半径 + 攻撃の半径とイコールになるとちょうど接触しているんでした。
つまり下記の式が成り立つ時、
ちょうど自機と攻撃が接触していることになります。
(自機の半径 + 攻撃の半径)の二乗 =
(攻撃x座標 - 自機x座標)の二乗 + (攻撃y座標 - 自機y座標)の二乗
4.ここだけ覚えよう
何か定理とかめんどくせーし話なげえんだよと思う方は
ここだけ覚えておきましょう。
(自機の半径 + 攻撃の半径)の二乗 >=
(攻撃x座標 - 自機x座標)の二乗 + (攻撃y座標 - 自機y座標)の二乗
これが当たり判定の条件式です。
成立する時は接触していることになるし、
成立しない時は接触していないことになります。
5.当たり判定(ウディタ)
では、自機の座標が(60, 60)で
攻撃の座標が(70, 80)の場合を考えてみましょう。
自機の半径は5、攻撃の半径は15とします。
(5 + 15)の二乗 >= (70 - 60)の二乗 + (80 - 60)の二乗
↓
20 * 20 >= 10 * 10 + 20 * 20
↓
400 >= 100 + 400
どうやら接触していないようです。
実際のウディタ画面で見てみても
接触していないのがわかりますね(図5-1)。
では、攻撃の座標が(60, 80)の場合を考えてみましょう。
(5 + 15)の二乗 >= (60 - 60)の二乗 + (80 - 60)の二乗
↓
20 * 20 >= 0 * 0 + 20 * 20
↓
400 >= 0 + 400
ちょうどぴったし接触しているようです。
実際のウディタ画面で見てみても
接触しているのがわかりますね(図5-2)。
形が複雑になるともう少し色々考えないとだめですが、
円形の当たり判定であればこんな感じで判定出来るので、
シューティングゲームなどに活かすことが出来そうですね。