8.当たり判定実装 その1

今回は当たり判定の実装です。今後のゲーム開発で茶エンジンに実装するべき避けて通れない機能です。長くなりそうなので前後編2回に分けてやります。今回の前半ではコライダーの実装をして、ModelViewerで表示できる部分までやります。後半で実際のモデル同士の当たり判定処理を実装して、試しに簡単なアプリを作って動作を確かめてみます。

当たり判定モデル(コライダー)の種類には、単純な球体や矩形を用いるものと、モデルそのもののメッシュのポリゴンを減らしたものを用いる2通りがあります。とりあえず今回は単純な球体とカプセルを用いて実装したものと、メッシュを実装したものを作ります。今後のゲーム開発で必要に応じてコードを追加していきます。

今回までの機能を実装した茶エンジンおよびModelViewerは以下からダウンロードできます。

Coco Blender Model [zip]2021/06/14download
Cha3DCoreLib1.14.3 [zip]2021/06/14download
Cha3DCoreLib1.14.3(Source) [zip]2021/06/14download
ModelViewer1.56.2(exe) [zip]2021/06/14download
ModelViewer1.56.2(Source) [zip]2021/06/14download


さて・・それでは実際にBlenderのモデルからどのようにコライダーモデルを作成し、実装していくのかその方法を説明していきます。





①球体、カプセルを用いたコライダーの作成


とりあえず、ココのBlenderモデルを開いてください。以前作ったココのモデルです。メッシュ・マテリアル・ボーン・アニメーションが既に実装されています。





コライダーにはメッシュが必要ないのでメッシュを非表示にします。そうすると画面上にはボーンのみが表示されていると思います。コライダーのデータは頂点が1つの場合は球体として、頂点が二つの場合はカプセルと判断されます。一つあるいは二つの頂点データを作成するためにはBlenderでパネルを作成し、二つ(三つ)の頂点を削除することで作ることができます。作成した頂点(線分)を腕や足など、当たり判定に指定したい場所に移動させてください。太さに関してはまだ意識する必要はありません。





とりあえず今回はこのように配置しました。





次にこれらの頂点データに対してボーンのウェイトを適用します、コライダーの動きとモデルの動きがうまく一致するように調整してください。





コライダーができたらColladaファイルに書き出します。最初に非表示にしたオリジナルのメッシュも書き出されたら困るので選択物のみにチェックを入れ、コライダーとボーンを選択してファイルに書き出します。





DAEファイルができたら、ModelViewerで茶エンジン用のコライダーモデル(CDRモデル)に変換します。まず、ModelViewerを起動し、先ほど書き出したDAEファイルを読み込みます。ModelViewerでは三角ポリゴンしか表示されないので頂点が1、2つのコライダーの頂点は画面に表示されません。





画面に何も表示されていなくても正常なので、そのまま「コライダー書き出し」でCDRファイルを書き出してください。





うまくファイルが書き出されたらテキストエディタで開いてデータを修正します。まず、ファイルのMODEL_IDをコライダーを適用したいモデル(MDLデータ)のIDと一致させます。次にRと書かれた部分ですが、これが球体・カプセルの太さになります。デフォルトでは0.1になっているのでうまくモデルデータに合うように太さを変更してください。





次にオリジナルの茶モデルファイル(MDLファイル)をテキストエディタで開いてください。今回のバージョンのModelVidwerから[COLLIDER_FILE_PATH]が追加されました。ここに先ほどのコライダーファイルのファイルパスを指定します。このパスを指定するとMDLファイルを読み込んだ時に自動的にコライダーモデルファイルも読み込まれるようになります。





ファイルの書き換えが済んだらModelViewerでMDLファイルを読み込んでみてください。以下のようにコライダーが表示されれば成功です。








②メッシュを用いたコライダーの作成


次にメッシュのコライダー作成方法ですが、基本的に①の方法と同じです。①の場合は最初にオリジナルメッシュのモデルを非表示にしましたが、メッシュコライダーの場合はオリジナルのメッシュをコピーして、Blenderでポリゴン数を適当に減らしたものを使用します。





後は①と同じようにDAEファイルを書き出し、ModelViewerでCDRファイルに書き出してオリジナルのMDLファイルにパスを設定してください。問題なければ以下のようにメッシュコライダーが表示されると思います。








次回は後半戦としてこれまでのコライダーモデルの衝突判定処理を実装します。何か実際に動く簡単なアプリを作ってみようと思っています。




© 2018 Chafumi Touji