44.プレイヤーの反発と追いかけるオブジェクト

今回は前回のサンプルを少し機能を追加しまして、いろんなオブジェクトを追加しています。FullTutorial004です。
特徴的なのは追いかけるオブジェクトです。ゲームを起動しますと前後左右から、四角いオブジェクトがプレイヤーを追いかけてきます。プレイヤーが逃げると、それぞれ、独自のAI行動をとりながら追いかけてきます。
プレイヤーが立ち止まると、追いかけるオブジェクトはプライヤーの近くに集まります。
前回のサンプルと違って、それぞれのオブジェクトが反発します。また、奥のほうに上下に動くボックスがあり、それに乗ることができます。
前回同様、WiZの学生さんは見慣れたサンプルでしょう。初めて見る方は、せめて動画だけでも再生してもらえるとBaceCrossフレームワークはこんなことができるのだなと多少はわかってもらえると思います。

この記事は、
コミット無駄なコメントの削除。
から、
コミットFullTutorial004追加。003も修正あり。ライブラリ修正あり。

の間の作業です。間に1つコミットがあります。
GitHubサイト

https://github.com/WiZFramework/BaseCross

を参照して下さい。

Dx12に関する情報は、マイクロソフト社のDirectX-Graphics-Samplesが主な情報源となります。

マイクロソフト社のDirectX-Graphics-SamplesのGitHubサイトは以下になります。

https://github.com/Microsoft/DirectX-Graphics-Samples

ぜひ、興味ある方はダウンロードしてみてDx12研究を始めるといいと思います。

今回追加したサンプルについて

今回のテーははいくつかあります。衝突後の反発、AIの動作、親子関係の実装などです。
衝突後の反発はプレイヤーをはじめ、動くオブジェクトに対して、RigidbodyコンポーネントSetIsHitAction(IsHitAction::AutoOnObjectRepel)を実装すると反発するようになります。反発係数も設定できます。
AIの動作Character.h/cppに記述があるSeekObjectに実装されています。このオブジェクトはステアリング(操舵)コンポーネントというのを実装してあります。ステアリング(操舵)コンポーネントSeek、Arriveといった、動的にフォースを調整して、AIを実装します。フォースというのはです。RigidbodyコンポーネントVelocity(速度)を管理するわけですが、そのVelocityを設定するのに、それぞれのオブジェクトに対して力(フォース)を加えます。
ニュートンの法則によって、ある一定の方向に力を加えると、質量にも関係しますが、加速度が生じます。その加速度を使って、Velocityを調整します。毎ターンごとにフォースを見直すので、今持ってる速度に動的に加速度が加わり、リアルな動きを実装することができます。
AIといいましても、判断を下すといった、高級なものではなく、ある目標に向かって追跡、到着したり、あるいは、グループ同士くっつかないようにするなどのフォースを発生させ、加速を生み出すわけです。プレイヤーにまとわりつくようなオブジェクトを表現するのに利用できると思います。
親子関係の実装は、奥に上下するボックスです。プレイヤーがこれに乗ると、移動するボックスと一緒に上下します。この実装は自動的に行われているのではなくPlayer::OnLastUpdate関数で位置を調整することで実装しています。上下移動するボックスはアクションコンポーネントを実装してあります。このコンポーネントは補間処理の動きをあらかじめ登録しておいて、連続的に動かすことができます。

実装のポイント

今回は、前回の実装に対してSharedLibプロジェクトにいろいろ記述を追加しました。大きく追加したのは自動衝突判定です。これまで球対OBBの者しか実装されてませんでしたら、今回、球対球、OBB対球、OBB対OBBを実装しました。フルバージョンでは、衝突判定用の境界ボリュームとして球、OBB、カプセルを用意しようと思ってますが、そのうちの球とOBBについては、実装した形になります。(カプセルはもう少しお待ちください)。
また、Rigidbodyコンポーネントにおける反発処理、アクションコンポーネント、操舵コンポーネント群も実装しました。各コンポーネントはSharedLibプロジェクト内に含まれますので、見てもらえればと思います。

ざっとポイントだけ説明しました。
そろそろサンプルもそろってきましたので、この辺でドキュメントの記述を行いたいと思います。次回までにどのくらいかけるかどうかわかりませんが、いくつか書いた段階でアップしたいと思います。
それでは次回もよろしくお願いします。

カテゴリー

ピックアップ記事

  1. 2016092201
    今回は前回のサンプルを少し機能を追加しまして、いろんなオブジェクトを追加しています。FullTuto…
  2. 2016092001
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル003をアップしました。内…
  3. eyecatch
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル002で懸案となっていまし…
PAGE TOP