あたり判定
当たり判定、衝突判定、コリジョン判定ともいいます。どれも同じ意味で、キャラクターどうしがぶつかったかどうかを
調べる操作です。例えば…、自機が撃った弾が敵にあたったかどうか調べて、あたっていたら敵を爆発させる…
などの処理で使用します。
この作業はキャラクターの座標が分かっていれば自力で出来ないこともないのですが、結構めんどくさい上に
HSP上でやれば速度の問題も気になるところです。
しかし、Easy3Dではこれを簡単に行なうためのいくつかの専用の命令が用意されています。
豊富すぎてどれを使えばいいか分からなくなりそうですが、まあ調べる対象モデルによって次のように分類できます。
命令 |
検出対象1 |
検出対象2 |
E3DChkConfBillboard |
形状データ |
ビルボード |
E3DChkConfBillboard2 |
境界球 |
ビルボード |
E3DChkConfBySphere E3DChkConfBySphere2 E3DChkConflict E3DChkConflict2 |
形状データ |
形状データ |
E3DChkConfGround E3DChkConfGroundPart |
形状データ |
地面 |
E3DChkConfGround2 |
線分 |
地面 |
E3DChkConfLineAndFace |
線分 |
形状データ |
E3DChkConfWall E3DChkConfWall2 |
壁 |
形状データ |
境界球や線分は任意の値が指定できるようです。
命令の種類は多いですが、用途によって使い分けることで非常に便利なものになります。全部使うことはほとんどないと
思うのでとりあえずよく使うものだけ覚えておけばいいと思います。
E3DChkConfWall、
E3DChkConflict、
E3DChkConfGround、このあたりでしょうか。
判定領域
あたり判定処理では、2つの物体の一部が重なっていればあたっていると判定します。
さて、このときのあたり判定の判定基準となる領域はどうなっているのか?
3Dゲームでは次の2種類の判定方法が、処理が軽いため用いられることが多いようです。
・バウンディングボックス(Easy3Dでは
E3DChkConflictなどがこれ)
・境界球(Easy3Dでは
E3DChkConfBySphereなどがこれ)
モデルの各頂点、各面で判定を行えば正確なあたり判定が取れそうですが、計算量が膨大で処理が追いつかなくなることが目に見えています。
そこで通常は物体の形状を立方体や球体など計算が容易簡単な形状に簡略化して使用されるのが普通です。
それが、バウンディングボックスや球を使用する理由です。衝突判定はモデルの数が多いほど判定回数が増えるのでその分処理が重くなりやすいので、
一つ一つが軽いに越したことはないわけです。
1つずつ簡単に説明をしておきます。
バウンディングボックスとは要するに立方体です。
モデル形状を立方体に近似して、その立方体同士があたったかあたっていないかを計算します。
Easy3Dでバウンディングボックスを使用すると、モデルを包む最小の大きさの立方体が作成されこれをバウンディングボックスとするようです。
最小と言ってもその形状はXY,YZ,ZX平面に平行な面で形成された立方体だと思いますが。(未確認)
境界球とは、要するに球体です。あたり判定に使用する領域を球体として計算します。
E3DChkConfBySphereなどを使って境界球を使用するとその大きさは、モデルを包む最小の半径の球体になるようです。
ここではそれぞれがどのような計算で衝突しているかどうかを判定しているかについては触れないことにします。
理解するにはそれなりの数学の知識が必要だし、なにより書くのが面倒なので…。簡単にいきましょう。
判定に使う形状は、平べったいものや細長いものはバウンディングボックスで、丸っこいものは球体で…という感じで用途によって
適当に使い分けます。
だいたいはバウンディングボックスでいいと思うのですが、処理の重さはどっちが軽いんでしょうかね…。
テストしてみる
あたり判定がモデルに対してどのくらいの大きさでどのような形状をしているかを確認する命令は用意されていません。
壁とか、キャラクターのパーツごとの領域とか可視化して確認できるといいのですが、今は無理です。
慣れれば見えなくてもイメージ出きるのかもしれませんが…。
と言うことで(慣れてないので)なんとか確認できるしろものを作ってみました。
衝突を検知した領域内でのみ線を引くというだけのものですが、形状を実感しながら確認する程度は出来ます。
今回はスクリプト見せるのが恥ずかしいのでダウンロード形式にしています。(どっちにしろスクリプトは見れるのですが…。)
データも用意していますが、自分で作ったデータを表示してみるのもいいでしょう。
今回はパーツごとの判定を行なうようには作っていません。モデル全体でのあたり判定のみです。
ダウンロード
[ダウンロード:e3d015.zip]
スクリプトとsigファイルです。
Easy3D for HSP ver 1.1.2.0をインストールしてから実行してください。
GHP(仮)