3D DIGITAL SHOOTER

・開発時期

2022年6月

・開発言語・開発環境

開発言語:C++

開発環境:Visual Studio 2019

・使用ライブラリ

DirectX Tool Kit
CRI ADX LE

・開発期間

4ヵ月

・作品紹介

このゲームのジャンルはフライトシューティングです。
ステージの目標を達成しステージクリアを目指すゲームです。
プレイヤーはWEの消費量が少なく連射力が高いが威力が少なく直進でしか飛ばない通常弾と、WEの消費量が大きいが威力が高く敵を自動的に追尾する追尾弾を撃つことができます。
敵の撃った弾や敵に触れたりするとダメージを受けAPが減り0になるとステージクリア失敗となります。

この作品は東京ゲームショウ2022のビジネスデイで展示を行いました。

また、クリエイターズ甲子園にも応募している作品です。
クリエイターズ甲子園のページへ

・最新版はこちらからダウンロードできます

・使用した技術

クオータニオン
このゲームではモデルをXYZすべての軸において360度回転で使用するため、回転軸の自由度が消失してしまうジンバルロックがとても致命的でした。そこで、ジンバルロックが起こらないクオータニオンをモデルの回転マトリクスに使用しました。
使用していてとても扱いやすかったので3Dのゲームを今後制作する時もこの技術にまたお世話になると思いました。

球体スウィープボリューム
3Dゲームで2Dゲームと同じように球同士の当たり判定を行うと動いている判定同士だとどうしてもすり抜けてしまうことが発生していました。そこで球の動きを一つのカプセルに見立ててカプセル同士の当たり判定をとろうと思いましたが、正確な時間の動きに対応しておらず誤判定をすることがあることに気づき使用を控えました。ほかに何かないかと調べていくうちに球体スウィープボリュームを解説しているサイトを見つけたのでそこの情報を元に制作しました。
どれだけオブジェクト同士の速度が速くても当たっていれば当たった判定を取ることができ、どの座標でどのように衝突したのかを知ることができるため敵に弾を当てた際に発生するエフェクトの生成に役立ちました。

参考にしたサイト

・苦労したこと

エフェクトの描画方法です。エフェクトにはシェーダーを使用しており、追尾弾から発生している線上のエフェクトには丸いパーティクルをたくさん並べて線上に見えるようにしている為、どうしてもGPUに負荷がかかってしまっていました。

↑GPUの使用率が100%になってしまっている様子、画面のかくつきがすごかった

そこでまずできる限りパーティクルを減らすことから始めました。
画面外に追尾弾がある場合パーティクルを生成しないようにしたり、画面外のパーティクルの描画処理を行わないようにしました。が、それでもGPUの使用率が100%になってしまうことがあったので追尾弾が生成するパーティクルの頻度を線上に見えるくらいまでできる限り控えることで何とかGPUの使用率を80%ぐらいまで抑えることができました。

↑できるだけ抑えた結果、やっぱりまだGPUの使用率が高いと感じてしまう

それでもGPUの使用率は高いので今後の課題はGPUの使用率をもっと減らしていきたいです。