はじめに
UE4未経験な私が5日間で単純なゲームを完成させることができたので、まとめたいと思います。
作ったゲーム
上から迫ってくるエネミーたちを撃ってKILLするゲームです。 いわゆるインベーダーゲーム。
全てのエネミーを倒すとクリア
エネミーが撃つ弾に触ってしまうとゲームオーバーです。
[
エネミーが下まで来てしまってもゲームオーバーです。
開発環境
学習開始時のUE4スキル
UE4の学習を始めた時点での私のUE4スキルを挙げると以下の通りです。
・2年前にUE4をインストールしたことがある。
・2年前にレベルブループリントを使って画面に"Hello"と表示させたことがある。
・UE4でゲームを作ったことは無い。
これはUE4未経験といっても差し支えないでしょう。
そんなUE4未経験な私が5日間でインベーダーゲームを完成させるまでの過程を紹介したいと思います。
学習の流れ
以下の流れで学習とゲーム作成を行いました。
・初日~3日目 : UE4の基本を覚える
・4~5日目 : インベーダーゲームを作る
初日~3日目 : UE4の使い方を覚える
最初にやった事はUE4の基本を覚えること。人から勧められた下記の書籍を読みました。
全ての章を読んだ訳ではなく、6章~12章だけを読みました。
また、この書籍にはハンズオン動画が付いており、これを観ながらUE4の学習を進めました。
書籍だけを読むよりハンズオン動画を観たほうが速いです。ハンズオン動画オススメ。
覚えたことは全部メモする
今回、一度覚えたことは忘れないようにGoogleスプレッドシートに全てメモする、という事をやっていました。
覚えたことを忘れてしまった場合でも、メモを作ってるおかげですぐに思い出すことができます。
調べ直す手間を省略することができます。
メモしたもの
GoogleSpreadシートにメモしたものは主に以下のものです。
・分からないことを調べていた時に見つけたWebサイトのURL
・ショートカットキー
・エディタの操作方法
・ブループリントで使用したノード
・マテリアルで使用したノード
・コンポーネント
1回調べた物は2度調べなくていいように全てをメモします。
こうすることで時間を節約することができます。
4~5日目 : インベーダーゲームの開発
6~12章を読み終えたところで基礎をおさえることができました。
4日目からインベーダーゲームの作成に取り掛かります。
プロジェクトの新規作成
テンプレート; "TwinStickExample" を使用して新規プロジェクトを作成しました。
プレイヤーキャラの実装
TwinStickExampleではキーボード操作の上下左右移動が実装されています。
今回はインベーダーゲームを作りたいのでこれを改造し、左右だけに移動するようにしました。
また、弾の上下左右発射が実装されていたのでこれを改造し、マウスボタンを押しているときにだけ上方向に弾を発射するようにしました。
Tips: マウスの入力をとる方法
プロジェクト設定のAxisMappingを利用してマウス入力をとっています。
AxisMappingで設定した入力はブループリント側から取得することができます。
弾を生成するFactoryクラスを用意
弾を生成部分のロジックがかなり複雑なので、ロジックを見やすくするために専用のFactoryクラスを用意することにしました。
中身はこんな感じです。
このFactoryクラスは位置と向きを指定して弾を生成するFireShot関数を持っています。
FireShot関数はTwinStickPawnが持つFireShot関数をベースとして作成しました。
エネミーキャラの用意
TwinStickExampleではプレイヤーが操作する水色の機体が用意されています。
これを複製してマテリアルを差し替え、エネミー用の赤い機体を用意しました。
また、一定時間ごとに弾を下方向に発射するようにロジックを改造しました。
エネミーのFireShow関数の中身はこんな感じ。
Factoryクラスを作ったことおかげで、エネミーの弾の発射ロジックを簡潔に組むことができました。
エネミーのジグザグ移動の実装
エネミーのジグザグ移動の実装にはスプライン曲線を利用しました。
下記URLを参考に作成しました
[UE4] スプライン上を動く足場の作り方|株式会社ヒストリア
壁の用意
インベーダーゲームでは弾を防ぐ壁があるので、これを実装しました。
壁の仕様は以下の通りです
・壁に弾が当たったら弾を消す
・壁にはHPがある
・弾が当たると壁そのもののHPが削れ、サイズも小さくなる
・壁のHPがゼロになったら壁は消滅
詳細は割愛しますが、壁のブループリントのイベントグラフだけ載せておきます。
弾の改造
今回は「弾はプレイヤーのものなのか、エネミーのものなのか」という情報を持たせたいので、TwinStickProjectileには列挙型PawnType型の変数を持たせます。
列挙型PawnTypeにはPLAYERとENEMYの二つを持たせています。
ちなみに、列挙型は自分で作る必要があります。
エネミー死亡判定
エネミーにプレイヤーの弾が当たったときにエネミーが死ぬようにします。
判定時に弾のPawnTypeを見て、弾がプレイヤーのものだった場合にエネミーを破棄するということをやっています。
ゲームオーバー・ゲームクリア表示の用意
ゲームクリア表示・ゲームオーバー表示はWidgetを使っています。
ゲームオーバー時に表示を出す
プレイヤーに弾が当たったときにプレイヤーが死んでGameOverが表示されるようにします。
完成
以上でインベーダーゲームの完成です。