どうも、ねへほもんです。
こちらのゲームですが・・・
僕が作りました
1.CEDECから始まるゲーム開発
以前の記事で部外者がCEDECに侵入したお話をしましたが、今回は実際にゲームを制作したというお話です。
といっても、最初からオリジナルを作るのは無理なので、CEDECでお土産に買った本に沿って作っただけです。
(土日で始めるゲームづくり for UE5 | 株式会社ボーンデジタル)
只今夏休み中ですが、帰省も名古屋GPも行かない絶賛10連休なので、何か新しいチャレンジをしようと思いました。
大昔にPythonでゲーム制作をしたという記事をあの時とはゲームのクオリティが段違いです。
今回使用したのは、
Unreal Engine 5
です。(以下、UEと略します)
今年大ヒットした「Expedition33」をはじめ、実際に販売されているゲームでも使用されている本格的なゲームエンジンです。
プログラムの知識が無くても制作できる上、ビジュアルやサウンドエフェクトを手軽にリッチにすることができます。
僕含め、ゲーム業界で働かれている方は少ないと思います。
「Unreal Engineって市販のゲーム起動時に最初に表示されるから名前は知ってるけど、素人でも使えるものなのか?」
と気になっている方向けに、開発の工程を部分的にご紹介します。
1.ビジュアルを磨こう!
まずはビジュアル面、以前のPythonで作った時の、昔のフリーゲームのようなチープ差と比べると、PS4世代(※僕個人の感想です)くらいの美麗さになっているかと思います。
マップ上には家、植物、柵等を設置していますが、方法は至って簡単。
こんな感じで、マップに設置したいものを選び、場所や向きを指定するだけです。
そもそもこういう本格的な感じの家や柵をどう入手すんねんという話ですが、
公式(Epic Games、フォートナイトの会社)のマーケットプレイスから入手できます。
今回は無料の素材を使用しました。
後、マップ制作では物を置くだけでなく、キャラが場外脱走しないように障害物を置く必要もあります。
↑の写真で、家の前にうっすらと、黄色い枠で囲われた透明な壁が設置されています。
現実世界だと、目の前に壁が存在する場合、
①壁が視界に入る
②壁をすり抜けて通ることはできない
という2つが同時に満たされていますが、ゲームでは別々に実装する必要があります。
Pythonで制作した時は、「壁を実体化する」「壁をすり抜けられないという仕様を実装する」という2つの関数を1から別々に作る必要がありました。UE5でも、実体化と仕様の両面を考慮する必要がありますが、プログラミングが不要なのと、「物を設置する」→「その物と仕様を関連づける」という手順で進められるため、直観的で分かりやすいです。
マップの外観だけでなく、ステージギミックも拾い物です。
例えば、こちらの接触するとゲームオーバーになる杭ですが、
マップ下から見るとこんな感じです。
元々は先端の尖った長い丸太でしたが、先端部分のみを見える形で活用しています。
2.ステージギミックを作ろう!
続いてはゲームの心臓部、ステージギミックの話です。
ただ綺麗な素材を置くだけではゲームとはいえませんからね。
ステージギミックとしては、↑の写真のような動く杭や、手前の動く床等があります。
これらの処理を大まかにまとめると以下の通りです。
(杭を動かす)
①杭ごとに時間差で動き始める→「tフレームだけ動き始めを遅らせる」という変数tを杭ごとに設定
②杭が引っ込んでは地上に顔を出すという処理をループさせる
③②のループ処理に対応する形で、杭の見た目を動かしながら、杭の当たり判定も動かす
(杭に接触した時の処理)
①ゲームオーバーにする
②一定時間間を空ける
③スタート地点からやり直す(中間のチェックポイントを設ける処理も別に実装した)
で、これらの処理をUE5では以下のように実装します。
上半分が杭を動かす仕様、下半分が杭に接触してゲームオーバーになった時の処理です。
字が小さくて見づらいかと思いますが、①杭が時間差で動き始める(Delay)→②杭の動き(タイムライン)→③杭の見た目や当たり判定を動かす(Set Relative Location)という順序で、動作を設置した上で、それらを線で繋ぎます。
これならプログラム言語の知識は不要で、ゲームで実装したい処理を論理的に整理できるかと、それをUE5(ブループリント形式と言います)で上手く表現できるかだけが問われます。まぁ、プログラム言語の知識は不要といっても、UE5のローカルルールを知らないド素人にとっては、ブループリントでの表現が大きな壁なのですが・・・
杭を動かす処理はこんな感じでタイムラインに定義します。
最初(左端)と最後(右端)は座標ゼロで、真ん中の座標を下げることで、杭が地表にある→杭が潜る→杭が地表に戻るという順序で処理されます。
Pythonだとループ処理の実装も一手間ですが、UE5だとループボタンを押すだけで勝手にループしてくれます。
中間地点まで到達したら、ゲームオーバー時に途中からやり直せるという、チェックポイント機能も実装したギミックの1つです。
こちらは書籍から自分なりにアレンジした点として、「チェックポイントに到達!」という文字を表示させました。ゴールした時に文字を表示させる方法は書籍に載っていたので、同じ要領で簡単に出来ると思っていましたが、単純に表示させるギミックだけ実装すると、文字が消えないという問題に直面しました。
プレイヤーの感覚だと、チェックポイントに到達した情報なんて、せいぜい1秒表示されれば十分で、後はさっさと消えてくれとしか思いませんが、プログラミングの世界では表示させる処理だけでなく、消す処理も実装する必要があります。
書籍に載っていないオリジナルの開発ということで悩みましたが、「チェックポイントの入口に到着したら文字を表示させる」という処理の後に、「チェックポイントの出口を過ぎたら文字を消す」という処理を実装しました。
いかんせんUE5には僕の知らない大量の機能が存在するので、ただ文字を消すだけという単純な処理でも、ド素人が処理を考えて実装するのは苦労しました。ただ、しょぼいオリジナル要素でも入れた方が達成感があります。
3.次は自力で・・・?
とまぁ、書籍の内容は一通りなぞったのですが、そうなると次は自作ゲームへの挑戦です。
僕はYouTube投稿用に今回作ったゲームのプレイ動画を撮影する時に何度も失敗した位のアクション音痴で、根っからのコマンドRPG専門なので、やはりコマンドRPGを制作したいです。
まずは参考情報ですが、ググるとか、YouTube動画とか色々探しましたが、オーキド博士から最初のポケモンを貰った段階のド素人向けの解説は少なく、ジムバッジを2,3個手に入れた程度の初級者~中級者向けの解説が中心でした。
これは困ったぞ・・・
ChatGPT君、キミはゲーム開発もできるのか・・・
という訳で、ChatGPTの指示を受けつつ制作してみます。
少々お時間は掛かるし、挫折する可能性も十分ありますが、続報があればまたお伝えします。
では(^^)/