<前文>
今週は前文はなしです。
<本文>
<目的>
3章3節の5、ターン制の戦闘(turn based combat)の6、ゲームオーバーの画面の作成(Creating the game over screen)を勉強します。
<方法と結果>
<Step.0>
Ch2を使用します。
<Step.1>
スクリーンそのものをまず作成します。
- 新しいウィジェットブループリントを作成しGameOverScreenと名付けます。
- フルスクリーンのアンカーを持つイメージを一つ作成します。
- Detailパネル内でオフセットを0にします。
- カラーを黒にします。
- 更に、テキストブロックにGame Overのテキストと、Restartとボタンのテキストに記されているボタンと追加します。
とありました。
大体、言っている事は分かりますが、一応サンプルコードで確認しながら作成します。
まずGameOverScreenをWidget Blueprintから作成しました。
フルスクリーンのアンカーを持つイメージを作成しました。
Detailパネル内でオフセットを0にしました。
カラーを黒にしました。
更に、テキストブロックにGame Overのテキストと、Restartとボタンのテキストに記されているボタンと追加しました。
<Step.2>
RestartボタンのためにOnClickイベントを作成します。
ブループリントグラフ内でボタンのイベントをGet Game ModeがターゲットであるRestart Gameボタンにリンクします。
少し教科書のサンプルともサンプルコードの例とも違うのですが、上に示す形で作成しました。
<Step.3>
マウスのカーソルをここに表示する必要があります。
- Event Constructから始め、Get player controllerターゲットとするSet Show Mouse Cursorをリンクします。
- Show Mouse Boxをチェックします。
- Event ConstructとSet Show Mouse Cursorの間に2秒の遅れをセットします。
以下に示すように作成しました。
<Step.4>
次にRPGGameMode.h内で、ゲームオーバーに使用するためのウィジェットタイプのパブリックプロバティを追加します。
追加しました。
- ゲームオーバーの場合、ウィジェットを作成します。
- そしてそれをViewportに追加します。
- それはTick関数内にIf(combatOver)条件内にネストした条件として追加出来ます。
教科書のサンプルコードのままにTick関数内に追加しました。
PrePareReset()関数はこれから作成するそうです。
<Step.5>
RPGGameInstance.hのパブリックなメンバー関数としてPrepareReset()関数を作成します。
はい。
しました。
<Step.7>
これをテストするのにゴブリンのHpをプレイヤーより高くします。
Enemiesのテーブルを開きゴブリンのHPを100より高くします。
そしてエンカウンターを開始し、プレイヤーが死ぬまでプレイします。
するとGame Overのスクリーンが現れ、Restartをクリックするとゲームがもう一度開始します。
とありました。
ではテストしてみます。
以下に示すようにデータテーブルのEnemiesを開きGoblinのMHPを200に設定しました。
プレイヤーが死ぬまで戦闘を継続するとGame Overの画面が表示されました。
Restartボタンをクリックすると最初の画面に戻りました。
プレイヤーのHPが最初に戻っているかどうかは不明です。
もう一度戦闘画面に入って見ると両方ともHPは初期値に戻っていました。
テストは成功しました。
<考察とまとめ>
とうとう3章を終わらせる事が出来ました。3章の勉強を始めたのが今年の4月からなのでほぼ4カ月かかりました。ので今回は3章の総括を行います。
まず自分の書いたブログを読み直しました。基本的に読みにくいですが、毎週書くためには推敲を完璧にする訳にもいかないので、まあしょうがないです。しょうがないですが2つだけちょっと直したい処を書いておきます。
- 何に対して語っているのかが分からない場合が沢山ありました。そのブログを書いていた時は、自明の事だったので多分書かなかったのでしょうか、後から読むと何が目的でそれに対して何を語っているのかが不明です。
- 教科書に書かれている通りにコードを書いたらエラーになってしまった時に、エラーになった。以下の部分を変えた。直った。しか書かれていないと、後から読むと???となってしまいました。
限られた時間内で行う以上完璧に直すのは無理ですので、基本的にはしょうがないですが、時間がある時には、目的や疑問ははっきり書いておく。エラーを直した時は、どんなエラーだったのか、直す方法はどのように見つけたのか、それを試してどうだったのか、などを心がけたいと思います。
次に教科書の3章に対するそれぞれのブログを表にしました。
表にして気が付いたのですが、ブログに振っていた数字が間違いだらけでした。例えば3章の3.4と言って3章の4節を指しています。更に、「「Unreal Engine4.xを使用してRPGを作成する」の3章の3.4を勉強する part 5」と言う題が二つもありました。勿論内容はそれぞれ別の話です。これは直せばすぐに直せるのですが、このブログは正しい情報を発信するのが第一の目的ではなく、私がその時に勉強した内容を理解した限りでなるだけ正確にまとめるのが目的なので過去にさかのぼって直す事はしません。
このように、沢山の間違いや問題が存在していましたが、後でまとめるための資料としては十分なのでこれからも続けていこうと思います。
ブログを読み直したらそれだけで時間を使い切ってしまい、総括する余裕がなくなってしまいました。今週はこれで終わりです。