9.当たり判定実装 その2(ココファイト)
当たり判定実装後半です。前回実装したコライダーに対して、実際に当たり判定処理を行います。実装した機能をテストするために簡単なテストアプリ(ココファイト)を作ります。
当たり判定処理を実装するにあたって、機能の切り分けをするために今回からCha3DLibというライブラリを作りました。前回までのコライダーの機能も含めたライブラリ(Cha3DCoreLib)はエンジンの一番低レイヤに配置して、新しいライブラリはその上位レイヤに配置します。また、テストアプリのココファイトはこのライブラリの更に上位レイヤに配置し、アプリ全体として3層のレイヤ構造になっています。
ココファイト(アプリ) <--- 最上位レイヤ
----------------------------------------
Cha3DLib <------- 中レイヤ
----------------------------------------
Cha3DCoreLib <--------低レイヤ
最低レイヤのCha3DCoreLib(今までのエンジン)では単体のモデル・アニメーション・コライダーの機能実装とデータ管理を行っています。新しく作ったCha3DLibでは3Dフィールドを実現するためのカメラやデバイスを管理し、また複数のモデルデータを管理・表示するためのオブジェクトマネージャが実装されています。また、モデルデータのキーボードやマウス処理に対応するためにCharacterBaseというモデルのクラスを提供します。アプリを作る際にはこのCharacterBaseクラスを継承したオリジナルクラスを作って自分のカスタマイズした処理を追加する形になります。まあ、どうやって使うのかはココファイトのソースファイルを参照してください。何か特別な処理を追加する場合でなければ基本的にモデルの表示に関してはあまり意識しないで済むように作ってあるつもりです。APIの使い方もこれまで表にまとめたりしていましたが、更新する文量が多すぎるので返って目移りして分かりにくくなるので割愛します。ソースファイルとサンプルアプリを参考にしてください。
で・・今回の課題の当たり判定処理ですが、新しいライブラリ(Cha3DLib)のCheckCollisionという関数で実装しています。この関数内で使っているベクトル計算に関する部分はCha3DCoreLibのcommon.cppに記述していますのでご参考ください。まあ、ぐだぐだと説明するよりもソース読むのが一番手っ取り早いかと・・。ちなみにベクトルの距離計算等に関する部分は以下のサイトを参考にさせて頂きました。ペコリ。
ゲームつくろー!< 衝突判定編
今回のライブラリおよびテストアプリのダウンロードは以下から。テストアプリのために作ったBlenderデータはCocoFight1.0.4 Source [zip]に含まれています。
当たり判定処理を実装するにあたって、機能の切り分けをするために今回からCha3DLibというライブラリを作りました。前回までのコライダーの機能も含めたライブラリ(Cha3DCoreLib)はエンジンの一番低レイヤに配置して、新しいライブラリはその上位レイヤに配置します。また、テストアプリのココファイトはこのライブラリの更に上位レイヤに配置し、アプリ全体として3層のレイヤ構造になっています。
ココファイト(アプリ) <--- 最上位レイヤ
----------------------------------------
Cha3DLib <------- 中レイヤ
----------------------------------------
Cha3DCoreLib <--------低レイヤ
最低レイヤのCha3DCoreLib(今までのエンジン)では単体のモデル・アニメーション・コライダーの機能実装とデータ管理を行っています。新しく作ったCha3DLibでは3Dフィールドを実現するためのカメラやデバイスを管理し、また複数のモデルデータを管理・表示するためのオブジェクトマネージャが実装されています。また、モデルデータのキーボードやマウス処理に対応するためにCharacterBaseというモデルのクラスを提供します。アプリを作る際にはこのCharacterBaseクラスを継承したオリジナルクラスを作って自分のカスタマイズした処理を追加する形になります。まあ、どうやって使うのかはココファイトのソースファイルを参照してください。何か特別な処理を追加する場合でなければ基本的にモデルの表示に関してはあまり意識しないで済むように作ってあるつもりです。APIの使い方もこれまで表にまとめたりしていましたが、更新する文量が多すぎるので返って目移りして分かりにくくなるので割愛します。ソースファイルとサンプルアプリを参考にしてください。
で・・今回の課題の当たり判定処理ですが、新しいライブラリ(Cha3DLib)のCheckCollisionという関数で実装しています。この関数内で使っているベクトル計算に関する部分はCha3DCoreLibのcommon.cppに記述していますのでご参考ください。まあ、ぐだぐだと説明するよりもソース読むのが一番手っ取り早いかと・・。ちなみにベクトルの距離計算等に関する部分は以下のサイトを参考にさせて頂きました。ペコリ。
ゲームつくろー!< 衝突判定編
今回のライブラリおよびテストアプリのダウンロードは以下から。テストアプリのために作ったBlenderデータはCocoFight1.0.4 Source [zip]に含まれています。
ダウンロードはこちらから
ChaSoundLib1.7.2 Source[zip] | 2021/08/09 | download |
Cha3DCoreLib1.14.6 Source[zip] | 2021/12/14 | download |
Cha3DLib1.0.10 Source[zip] | 2021/12/14 | download |
CocoFight1.0.4 Source[zip] | 2021/12/14 | download |
CocoFight1.0.4(exe)[zip] | 2021/12/14 | download |
ChaSoundLib1.7.2[zip] | 2021/08/09 | download |
ChaSoundLib1.7.2 Source[zip] | 2021/08/09 | download |
Cha3DCoreLib1.14.5[zip] | 2021/08/09 | download |
Cha3DCoreLib1.14.5 Source[zip] | 2021/08/09 | download |
Cha3DLib1.0.10[zip] | 2021/08/12 | download |
Cha3DLib1.0.10 Source[zip] | 2021/08/12 | download |
CocoFight1.0.3(exe)[zip] | 2021/08/12 | download |
CocoFight1.0.3 Source[zip] | 2021/08/12 | download |
Cha3DLib1.0.9[zip] | 2021/08/09 | download |
Cha3DLib1.0.9 Source[zip] | 2021/08/09 | download |
CocoFight1.0.2(exe)[zip] | 2021/08/09 | download |
CocoFight1.0.2 Source[zip] | 2021/08/09 | download |
さて・・テストアプリのココファイトですが、exeファイルをダブルクリックすれば起動すると思います。実行環境がDirectX12に対応している必要があります。作者のデバッグ環境ではノートPC(VAIO)ではちょっと動作が重たいのですがかろうじて動きはします。デスクトップではまあ最低限の動作はするかなあ・・。まあ、フレームレートの改善はこれからの課題です。DirectX12の実装に関してはまだまだ基本的なことしか知らないので・・。
操作方法は方向キーでキャラ移動。スペースキーで棒を振ります。ただピースケを殴るだけのアプリです。ゲーム的要素は特にありません。まだデバッグが不十分なのでピースケが柵から動けなくなったり、なぜかフィールドに沈んでしまうようなバグがあるようですが、テストアプリなので厳しいことは別にええかと・・(^^;
以下のようなアプリが表示されると思います。
操作方法は方向キーでキャラ移動。スペースキーで棒を振ります。ただピースケを殴るだけのアプリです。ゲーム的要素は特にありません。まだデバッグが不十分なのでピースケが柵から動けなくなったり、なぜかフィールドに沈んでしまうようなバグがあるようですが、テストアプリなので厳しいことは別にええかと・・(^^;
以下のようなアプリが表示されると思います。
さて・・今回でとりあえず当たり判定は実装しました。今後も改良箇所があると思いますが、とりあえず課題はこなせたとして先に進むことにします。・・で、次回ですが、やっと”狐火と夏休み”のフィールド作成に手をつけられるようになりました。オープンワールドの実装となるとGPUの負荷が問題になってくると思うのですが、作りながら試行錯誤することにします。まずはゲームに必要なフィールドを考えて単純なモデルを用いたホワイトボックスで動作を確認しながら進めます。ホワイトボックス完成後は1年くらい時間をかけて実際のゲームのフィールドを作っていくことになると思います。
© 2018 Chafumi Touji