はじめに
第18章と第19章はブループリントの応用編ともいえる内容で、ここまでをマスターすればひとまずミニゲーム程度のゲームであれば自分で作ることができるようになります!
「極め本」においてもここでブループリントの章は終了となりますので、若干難易度は上がりますがゆっくりと進めてみてください!
第18章 生と死と
ゲームをプレイ中に新しいアクターを生成したり削除したりする方法を学びます。
また、前回のイベントディスパッチャーの応用として、ゲームプレイ中にイベント通知を受け取るようにするバインドの機能を学びます。
18.1.1 ロケーター
旧)[ゲーム]>[クラスからアクタをスポーンします]を選択します。
新)[ゲーム]>[Spawn Actor from Class]を選択します。
18.3.1 独自のイベントRespawnPlayerを作る
18.3.3 イベントをイベントにバインドする
引き続きPNGameModeブループリントを編集します。
旧)[Game]>[イベントをOnDestroyedとバインド]を選択します。
新)[ゲーム]>[Bind Event to On Destroyed]を選択します。
検索欄に[bind ondestroyed]と入力するとすぐに見つけられます。
[Bind Event to On Destroyed]ノードの赤色のデリゲートピンを[RespawnPlayer]ノードに繋ごうとしても繋ぐことができません。

解決する方法としては、まず先程作成した[RespawnPlayer]ノードを一旦削除します。次に、[Bind Event to On Destroyed]ノードの赤色のデリゲートピンを伸ばし、なにもないところで[左クリック]を離すことで表示されるメニューから、[Add Custom Event…]を選択します。

これによって作成されるカスタムイベントの名前を再び[RespawnPlayer]にします。(名前を変更出来ない場合は、過去の[RespawnPlayer]ノードが履歴として残っているので、一旦[Compile]ボタンを押してコンパイルして下さい)

作成されたカスタムイベントには[Destroyed Actor]という引数が増えています。これは、UE4のバージョンアップによって、[Bind Event to On Destroyed]ノードから呼ばれるイベントの引数が変わったことを意味しています。
初めから作成してあった[RespawnPlayer]ノードに赤色のデリゲートピンを繋ぐことができなかったのは、このように引数が変わってしまっていたために対応していないと判断されたからです。その際は、慌てずに何もないところで新たにカスタムイベントを作成してみると、今回のように引数が変わっていることに気付くことができます。
最終的に下図のようになれば完成です。

第19章 リワード、そしてリスク
この章はプログラミングでいうところの「変数」と「関数」を学びます。
どちらもプログラミングを初めて学んだ頃は、その概念を理解するのに苦労した記憶があります。UE4のブループリントビジュアルスクリプティングは、そうした要素もパズルのピースのように視覚化されており、文字だけのプログラミング言語よりもイメージしやすいのではないかと思います。
無理に理解しようとするよりも、本の通りに手を進めることで自然と身についていくと思います!
19.1.3 変数の種類
旧)[変数へ昇格]を選択します。
新)[Promote to variable]を選択します。
旧)[ユーティリティ]>[キャスティング]>[PNPlayerPawnへキャストする]を選択します。
新)[ユーティリティ]>[Casting]>[Cast To PNPlayerPawn]を選択します。
※検索欄に[PNPlayerPawn]と入力するとすぐに見つけることができます。
旧)[入力]カテゴリの[新規]ボタンをクリックします。
新)[インプット]カテゴリの[新規]ボタンをクリックします。
19.3.4 タイマーの活用
[Set Timer]ノードは、最新版では[Set Timer by Event]ノードと[Set Timer by Fuction Name]ノードの2種類があります。ここでは[Set Timer by Function Name]ノードを使用します。

19.4 さまざまなサブルーチンを活用する
カスタムイベント、関数、そしてここで学ぶマクロは、「処理をまとめる」という意味では同じように見えるので、どの場面でどれを使えばいいのか、初めのうちは判断がしづらいと思います。また、今回登場していませんがインターフェースという仕組みもあります。
正しく使い分けるにはそれぞれの特性を理解する必要がありますが、きちんと使い分けることができればブループリントを使いこなしてると言えると思います!
ひとまず現段階では本書にある通り、まずはカスタムイベント、出力が必要ならば関数にする。ライブラリは関数ライブラリを使う。という方針で間違いありません。
ある程度理解できたと感じた際には、以下の記事を参考に使い分けを意識してみるとよいかと思います。

19.4.1 ブループリント関数ライブラリ
19.4.3 スプリントのリスクを完成させる
ここでも先ほど同様、[Set Timer]ノードは[Set Timer by Fuction Name]ノードに変わっていますのでご注意ください。
まとめ
ここまでで本書におけるブループリントの学習は以上です。どうだったでしょうか!難しかったでしょうか?
しかし本当の意味で難しいのは、いざ自分で一からゲームを作ろうとしたときに、どんな変数を用意するか、どんなイベントや関数を用意するかを考え(設計)、そして組み上げていくことです。
しかしそれがゲーム制作の一番楽しいところでもあるので、ぜひ何度も読み返して使いこなせるように頑張ってください!
