43.プレイヤーと固定ボックス

前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル003をアップしました。内容的には以下のような動画です。
WiZの学生さんは見慣れたサンプルっかもしれません。初めて見る方は、せめて動画だけでも再生してもらえるとBaceCrossフレームワークはこんなことができるのだなと多少はわかってもらえると思います。

この記事は、
コミットFullTutorial002(Dx12版)の影追加(シャドウマップ追加)。ライブラリ修正あり。
から、
コミット無駄なコメントの削除。

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

https://github.com/WiZFramework/BaseCross

を参照して下さい。

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

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

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

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

 

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

今回はFullバージョンにおける、基本的に実装される機能についての紹介です。
上記の動画をご覧ください。このサンプルでは自動衝突判定、自動重力、物理計算、そしてデバッグ用LookAtカメラが実装されています。
ゲームの実体は、GameSources内に記述します。Dx11版もDx12版も違いはありません。ただし、Dx12版の場合、GPUがDx12に対応していないとラップモードというモードで起動しますので、大変ストレスがかかります。
Dx12でストレスがかかる場合は、Dx11で実行を試してください。
今回のサンプルで実装されるのは、固定ボックスプレイヤーです。
固定ボックスGameSourcesプロジェクトのCharacter.h/cppに記述があります。重要なのはFixedBox::OnCreate関数だけです。

//初期化
void FixedBox::OnCreate() {
	auto PtrTransform = GetComponent<Transform>();

	PtrTransform->SetScale(m_Scale);
	PtrTransform->SetRotation(m_Rotation);
	PtrTransform->SetPosition(m_Position);

	//衝突判定
	auto PtrObb = AddComponent<CollisionObb>();
	PtrObb->SetFixed(true);

	//影をつける
	auto ShadowPtr = AddComponent<Shadowmap>();
	ShadowPtr->SetMeshResource(L"DEFAULT_CUBE");

	auto PtrDraw = AddComponent<PNTStaticDraw>();
	PtrDraw->SetMeshResource(L"DEFAULT_CUBE");
	PtrDraw->SetOwnShadowActive(true);
	PtrDraw->SetTextureResource(L"SKY_TX");
}

こんな感じでコンポーネントを実装します。
プレイヤーには、衝突判定のほかに、重力、物理計算を実装します。また、ステートマシンにより通常状態ジャンプ状態を切り分けます。Aボタンでジャンプします。

実装のポイント

Fullバージョンの実装には、ライブラリ側で行うことが一段と増えます。
おもな実装はSharedLibプロジェクトです。この中にUpdate系の実装が入りUpdate系コンポーネントが入ります。
Dx11およびDx12の違いはあっても、Update系コンポーネントは同じコードを共有できるように記述します。このようにしておくと、将来Abndroid版などを作成するうえでも、なるべく共有して使えるようになります。
Fullバージョンコンポイーネント方式をとってるわけですが、その親クラスにあたるのがSharedLib内のComponents.h/cppに記述があるComponentクラスです。いろんなコンポーネントが実装されますが、皆、この派生クラスになります。
続いて重要なのは、同じくComponents.h/cppに記述があるTransformコンポーネントです。このコンポーネントはデフォルトでどのゲームオブジェクトも保持し、スケーリング、回転、位置の3つの要素を管理します。これらをワールド行列に変換するのは自動的に行われます。
このほかに補間処理をカプセル化するAction系自動衝突判定であるCollision系重力Gravity物理計算Rigidbodyが実装されます(まだ完全には実装されてませんが。)
将来的にはこのほかにステアリング系のコンポーネントなども実装します。
また描画Fullバージョンでは意識しなくてもかまいません。描画コンポーネントを実装して、パラメータを設定すれば描画します。

このように、Fullバージョンではゲーム作成側プログラムというよりは設定に近い感覚でゲーム制作を実装をはじめられるようになります。
ただ、なんどもこのブログでも指摘してますように、個別のゲームをしっかりと実装するためには、フレームワークを超えた実装が必要になります(というか必要になるはずです)。
そんな時はシンプルバージョンにおける描画の方法自動衝突判定ではなく、衝突判定関数を使った判定を参考にしていただいて、独自のロジックを、全部ではなくても、ポイントポイントで実装してみるといいと思います。

では今回はこの辺で。
次回は、今回のサンプルに新しいオブジェクトを追加実装していく感じで紹介したいと思います。

またよろしくお願いします。

カテゴリー

ピックアップ記事

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