Game04.「PUSH PULL」

OVERVIEW

ゲーム制作4作目「PUSH PULL」に関する作品紹介

ゲームのコンセプト

ステージに存在するブロックを押したり引いたりしてギミックを攻略し、ゴールを目指す3Dアクションゲーム


作品概要

ジャンル:3Dアクション

DirectXTKを用いて作った3Dアクション。3Dを学びたい、かつアクションゲームをを作りたいと思ったため、私はこれにブロックなど謎解き要素を追加して3Dアクションのゲームを制作。今作では、上の写真にあるような茶色いブロックを使って足場にしたり、ブロックで敵を落としたりしてギミックを攻略しつつゴールを目指すゲームです。


作品URL

https://drive.google.com/drive/folders/14Y5paTUlt1A4g5Wue-yq9mRlxq3mk2Pi


導入した外部ソフト

ソフト名:ADX2 LE

ダウンロードURL: https://game.criware.jp/products/adx-le/ 

使用箇所:ゲーム内のサウンド


アピールポイント

マップをcsvファイルで管理することによって、ステージの修正が簡単にできるようになりました。

このゲームでの3Dマップの作り方としてはまず、数値の5桁目をオブジェクトの種類、3・4桁目を出したいオブジェクトの一番低い位置、1・2桁目を出したいオブジェクトの一番高い位置として使用しています。それらを場所に応じて数値を変えながら配置することで3Dマップを作成しました。


ジャンプ中のプレイヤーの位置が分かりやすくなるように、シェーダーを使って影を作成しました。以前、影を作っていなかった頃、プレイヤーの位置が分からず落ちて死ん でしまうことを防ぐために影を作ろうと考えました。 その時に当時勉強中だったシェーダーを取り入れて影を制作してみよう と試みました。 どうやったら影っぽく見せれるのかを考えつつそれを実現するためには どうすればいいのかを研究しながら制作しました。

プレイヤーの行動や位置に応じてカメラが移動するように制作しました。プレイヤーの行動や位置に応じてカメラの位置や向きを変えることにより、通常のカメラ目線ではプレイヤーから見えないような場所が見えるようになり、地形も把握しやすくなるように工夫しました。以前はカメラの処理を一定の方向からのみ追従するように動かしていましたが、プレイしてくれた方々から、特定の場所で「マップの奥行きが分からずプレイしづらい」、手前にプレイヤーを動かす時に進行方向から何が出てくるのかが把握しづらく「敵がいるかも、穴に落ちるかも、という不安がストレスになる」という意見がありました。

そのため、これらを解消できるよう、カメラの移動を制御できるように処理を追加しました。

プログラム面で評価してほしいところ

ステージをcsvで制作したところです。csvで管理したことによって、ステージをいじりやすくなり、デバッグもしやすくなりました。また、ゲームの見栄えをよくするためにシェーダを用いてエフェクトを制作しました。


今後の展望

マップの制作がまだ分かり辛く、作りづらいためマップエディタを制作したいと考えています。現状2Dで上からステージを見た図、横から見た図の2画面を利用してマップを制作できるようにしました。しかし、まだ立体的にステージを把握しづらいため、今後は3D表示をしながらマップを制作できるようにツールを作っていきたいと考えています。


苦労したこと

3Dのマップの表示・出力をどうするかに苦労しました。この作品を作り始めた当初は、私の作る初の3D アクションゲームということで、3Dでのマップの作り方が分からず苦労しました。そのため、平面で制作しようと考えたこともありましたが、絶対に3D空間で動ける立体的なアクションゲームを制作したいという意思があったため、諦めず挑戦し続けました。

まず、初めにプレイヤーの処理を制作出来るように、壁や床のオブジェクトをサイズや場所ごとにコードへ直に打つ方法を試しました。しかしこの方法では簡単な地形ならできますが、複雑な地形になると時間がかかってしまい、ステージが広がるほどコードへ打ち込む量も増えていき、プログラム的な見映えも悪くなるため、この方法は没になりました。

次に試した方法は、高さごとにCSVを読み込み、XZ平面としてオブジェクトを出力しながら層状に重ねる方法です。この方法では出力は出来るのですが、高さごとにCSVを読み込む必要があるため、読み込みにかなりの時間がかかる懸念点が見つかり、この方法も没になりました。

そして最後に見つけた方法が、上記でのアピールポイントで説明した5桁の数値を使って出力する方法です。これを試した結果、ステージごとにCSVを読み込む量が一つとなりコードをあまり複雑にしなくても良くなったため、この方法を採用し今回のゲームの3Dマップを生成することに成功しました。ただ、これを取り入れた結果CSVに書き込む数値が分かりづらくなり他の人が理解し辛くなってしまったため、今後はマップエディタを作り誰でもステージを制作できるようにしていきたいと考えています。



最後まで読んでいただきありがとうございました!