今から始めるUE4極め本⑦ 〜カスタムイベント編〜

UE4極め本

今回はブループリントを使ってステージ上の仕掛けを作っていきます。ゲームの実装部分で一番面白いところかもしれません。

ただしブループリントの機能を使いこなすためには、今回登場するカスタムイベントやイベントディスパッチャーの理解は不可欠です。

記事の最後には復習も頑張って書いてみたので、ブループリントのルールに慣れるまでゆっくり進めてみてください!

わんちゃん
もし途中で躓いてしまった場合はコメントやTwitterでご連絡ください~!

第15章 トリガーを使ったインタラクションの実現

15.2.1 簡単なプレイヤーキャラの死亡処理を準備する

最新版と異なる箇所
P.239
[OnActorBegibOverlap]のピンが2つになり、[Overlapped Actor]が増えました。今回使用するのは[Other Actor]の方です。

15.3.2 ゼロからアクタを構築する

ルートコンポーネントを設定する

最新版と異なる箇所
P.248
[コンポーネント]パネルにはデフォルトで[DefaultSceneRoot]というシーンコンポーネントが存在します。[コンポーネントを追加]から[Scene]を追加すると、[DefaultSceneRoot]の子として追加されます。
本書のように先頭に[Scene]コンポーネントを追加したい場合は、[Scene]コンポーネントを親である[DefaultSceneRoo]にドラッグ&ドロップすれば可能です。

手順9でBox Collisionを追加する際に、SceneRootを選択した状態で[コンポーネントを追加]をするか、Meshを選択した状態で[コンポーネントを追加]をするかによって、どのコンポーネントの子としてBox Collisionが追加されるかが変わります。今回はSceneRootの子として追加します。

Box1はSceneRootの子、Box2はMeshの子

Meshの子にするとCollisionも斜めになる

15.3.3 初めてのブランチ

翻訳が異なる箇所
P.252
ブランチノードは、Branchノードと表示されていることがあります。

第16章 タイムラインを使ってアクタやコンポーネントを動かす

16.2 初めてのタイムライン

翻訳が異なる箇所
P.258
アクションリストから[タイムラインを追加する…]は、[Add Timeline…]と表示されていることがあります。

16.3 FloatトラックとLerpを組み合わせる

翻訳が異なる箇所
P.263
タイムラインの[キー補間]メニューの[自動]は[Auto]です。

16.4.1 ふすまの構造を準備する

本書では[Arrow]コンポーネントをルートにしていますので、作成時にDefault Scene Componentにドラッグ&ドロップしてルートにします。

また、スタティックメッシュコンポーネントを4つ作成する際に、スタティックメッシュ同士が親子関係にならないように注意してください。すべて[Arrow]コンポーネントの子にします。

16.4.2 Vectorトラックでキーを打つ

[Timeline]ノードの応用編です。途中でうまくいかなくなった場合は[Timeline]ノードを作り直して一からやってみてください!何度もやればその分理解できます。

完成後に実際にレベルに配置して動作確認する際に、Arrowの向きを見ることでアクターの向きがどちらを向いているか判別することができます。

第17章 カスタムイベントを使いこなす

17.2.1 初めてのカスタムイベント

カスタムイベントを追加する

翻訳が異なる箇所
P.275
アクションリストから[カスタムイベントを追加…]は、[Add Custom Event…]と表示されていることがあります。

カスタムイベントを追加する機会は今後も多いのですが、右クリックから毎回[Add Custom Event…]を探していると時間がかかります。私は右クリックのあと、キーボードで [cus]と入力すれば[Add Custom Event…]を絞り込んだ状態になるので[Enter]キーを押して手早く追加するようにしています。

カスタムイベントの名前を変更する

カスタムイベントのノードを選択した状態で、詳細ウィンドウ上で変更してもいいですが、[F2]キーを押すと名前変更モードになるので手早く変更できます。

[BeginPlay]に繋がっているノードを切断する

[Alt]キーを押しながら接続部分のピンをクリックすると手早く削除することができます。

17.2.3 カスタムイベントを呼び出す

レベルブループリントにPNGateActorのリファレンスを作成する

翻訳が異なる箇所
P.277
[PNGateActorのリファレンスを作成]は、[Create a Reference to PNGateActor]と表示されていることがあります。

慣れるまでは忘れやすいのですが、レベルブループリント上でレベルに配置したアクターのリファレンスを作成するには、エディタ上でそのアクターが選択状態になっている必要があります。そうなっていなければ、右クリックしても[PNGateActorのリファレンスを作成](もしくは[Create a Reference to PNGateActor])がメニューに出てきませんのでご注意ください。

17.3 イベントディスパッチャーで独自のイベントを発行する

イベントディスパッチャーはブループリント同士の連携をする上で非常に重要な要素ですので是非マスターしましょう!

この記事の最後にちょっとした解説をつけましたので、もしうまく理解できない場合はとりあえず最後まで手を動かしたあとに読んでみてください!

17.4.3 スイッチに「TurnOff」を追加する

カスタムイベント「TurnOff」を追加する

復習ですが、[TurnOff]というイベントがあらかじめ用意されているわけではありません。右クリックメニューから[Create a Reference to PNGateActor]を選択し、新規カスタムイベントを追加したうえで名称を[TurnOff]に変更してください。

[Direction]出力ピンから列挙型でフロー制御する

翻訳が異なる箇所
P.286
[ユーティリティ]>[フロー制御]>[切り替える]>[ETimelineDirectionをオン]は、[ユーティリティ]>[フロー制御]>[Switch]>[Switch on ETimelineDirection]と表示されていることがあります。

17.4.4 時間で戻るスイッチを追加する

DelayのあとにFusuma02 Switchの[TurnOff]イベントを呼び出す

Fusuma02 Swichには[TurnOff]というカスタムイベントと、[OnTurnedOff]というイベントディスパッチャーがありますので間違えないように注意ください。ここでは[TurnOff]カスタムイベントを呼び出します。

今回の復習

今回はカスタムイベントイベントディスパッチャーという2大機能が登場し、言われるがままにブループリントを作ってきました。

少し難しい箇所もあったので、一度今回の実装をまとめてみたいと思います。

やりたかったこと

床に仕掛けられたスイッチを踏むと、ふすまが開く仕掛けを作りました。追加機能として、5秒後に自動的にふすまが閉じるようにしました。

今回の登場人物

今回登場したのは、ふすまを開くスイッチである[PNSwitchActor]、ふすま本体の[PNGateActor]、ステージ管理人である[PNStage01_GB]です。

[PNSwitchActor]と[PNGateActor]はクラスブループリントで、[PNStage01_GB]はレベルブループリントです。

以後、[PNSwitchActor]をスイッチ、[PNGateActor]をふすま、[PNStage01_GB]をレベルと呼びます。

疑問

初めてこの章を勉強したとき、私は以下のような疑問を持っていました。

  • 《疑問1》[Fusuma Switch]から直接[Fusuma]の[Open]カスタムイベントを呼べばいいだけなのでは?
  • 《疑問2》イベントディスパッチャーというのを使う理由がわからない

ルール・制約

ブループリントには以下のようなルールがあります。

  • 《ルール1》マップ上のアクター同士は、互いに相手の参照を知らない
    参照を知らないということは、相手のイベントを呼び出すことができないということです。このルールによって、《疑問1》に挙げたような、マップ上に配置されたスイッチはふすまの[Open]イベントを直接呼び出すことができません。

    実はアクターから他のアクターの情報を知る手段は用意されているのですが、原則としてはアクター同士は赤の他人状態です。このため、アクターAをきっかけとしてアクターBのイベントを呼ぶ場合は、一般的にレベルブループリントを経由します。
  • 《ルール2》マップ上のアクターはレベルの参照を得られないが、レベルからアクターの参照は得られる
    スイッチやふすま等のアクターは、他のアクターを知らないだけでなく、レベルに対してもイベントを呼び出すことができません。しかしステージ管理人であるレベルは、自分のマップに存在するアクターの参照を得ることができます。この仕組みを利用して問題を解決するのが《疑問2》で挙げた、イベントディスパッチャーです。

カスタムイベントとイベントディスパッチャーの違い

カスタムイベントを呼び出したい場合、呼び出す相手の参照が必要になります。電話をかけるために相手の連絡先が必要なイメージです。その特定の相手に対して「扉を開けて!」と指示を出します。

相手の連絡先(参照)を知っているからイベントを呼び出せる

イベントディスパッチャーの場合、自分は他の相手がいようがいまいが、「僕のスイッチがオンになりましたぁぁあ!!」と叫んでるイメージです。ただ叫んでいるだけなので、相手の参照が必要というわけではありません。

実際の処理としては、スイッチの下図の部分です。

赤線で囲まれた[Call On Turned On]は[OnTurnedOn]イベントディスパッチャーを呼び出すという意味で、Target(対象)はself(自分)になっています。
この処理だけでは、ただ自分自身が「On Turned On!」と叫んでいるだけで何も起こりません。

 

イベントディスパッチャーで重要なのは、相手が自分のことを知っていれば、自分の声をきっかけに動き出してくれるということです。

一番伝えたい相手であるふすまは、アクター同士なのでスイッチの参照を得られませんが、レベルは管理人なのでスイッチとふすま両方の参照を得ることができます。

そこでレベルがスイッチのイベントディスパッチャーの聞き手となり、スイッチの叫び声をきっかけにふすまのカスタムイベントを呼んであげるのです。

実際の処理としては、レベルブループリントの下図の部分です。

このように、マップ上のアクターの出来事をきっかけに他のアクターを動かしたい場合、レベルを経由するという組み方はステージ制作の基本的な考え方となります。

まとめ

これでカスタムイベント編は終了です!

今回学んだ範囲はブループリントの実践的なテクニックですので、ぜひ理解できるまで何度もチャレンジしてみてください!私は理解するまで結構苦労しました!

わんちゃん
次回は引き続きブループリントを使ってゲーム要素を追加していきます!

おねがい

学習の際にわかりにくいと感じたことや躓いてしまった箇所がありましたら是非教えてください!

あなたのノウハウを記事に反映することで、次に学習する方の手助けになります!記事のコメントやTwitter等でご連絡ください~!