〜カスタムイベント編〜2020年2月1日UE4極め本ツイートシェアはてブ送るPocket今回はブループリントを使ってステージ上の仕掛けを作っていきます。ゲームの実装部分で一番面白いところかもしれません。ブループリントの機能を使いこなすためには、今回登場するカスタムイベントやイベントディスパッチャーの理解は不可欠です。Actor]が増えました。Actor]の方です。ゼロからアクタを構築するルートコンポーネントを設定する最新版と異なる箇所P.248[コンポーネント]パネルにはデフォルトで[DefaultSceneRoot]というシーンコンポーネントが存在します。[コンポーネントを追加]から[Scene]を追加すると、[DefaultSceneRoot]の子として追加されます。本書のように先頭に[Scene]コンポーネントを追加したい場合は、[Scene]コンポーネントを親である[DefaultSceneRoo]にドラッグ&ドロップすれば可能です。Collisionが追加されるかが変わります。今回はSceneRootの子として追加します。ブランチ翻訳が異なる箇所P.252ブランチノードは、Branchノードと表示されていることがあります。Timeline...]と表示されていることがあります。FloatトラックとLerpを組み合わせる翻訳が異なる箇所P.263タイムラインの[キー補間]メニューの[自動]は[Auto]です。Componentにドラッグ&ドロップしてルートにします。スタティックメッシュコンポーネントを4つ作成する際に、スタティックメッシュ同士が親子関係にならないように注意してください。すべて[Arrow]コンポーネントの子にします。Vectorトラックでキーを打つ[Timeline]ノードの応用編です。途中でうまくいかなくなった場合は[Timeline]ノードを作り直して一からやってみてください!何度もやればその分理解できます。完成後に実際にレベルに配置して動作確認する際に、Arrowの向きを見ることでアクターの向きがどちらを向いているか判別することができます。Event...]と表示されていることがあります。Event...]を探していると時間がかかります。Event...]を絞り込んだ状態になるので[Enter]キーを押して手早く追加するようにしています。カスタムイベントの名前を変更するカスタムイベントのノードを選択した状態で、詳細ウィンドウ上で変更してもいいですが、[F2]キーを押すと名前変更モードになるので手早く変更できます。[BeginPlay]に繋がっているノードを切断する[Alt]キーを押しながら接続部分のピンをクリックすると手早く削除することができます。PNGateActor]と表示されていることがあります。慣れるまでは忘れやすいのですが、レベルブループリント上でレベルに配置したアクターのリファレンスを作成するには、エディタ上でそのアクターが選択状態になっている必要があります。PNGateActor])がメニューに出てきませんのでご注意ください。スイッチに「TurnOff」を追加するカスタムイベント「TurnOff」を追加する復習ですが、[TurnOff]というイベントがあらかじめ用意されているわけではありません。PNGateActor]を選択し、新規カスタムイベントを追加したうえで名称を[TurnOff]に変更してください。ETimelineDirection]と表示されていることがあります。Swichには[TurnOff]というカスタムイベントと、[OnTurnedOff]というイベントディスパッチャーがありますので間違えないように注意ください。ここでは[TurnOff]カスタムイベントを呼び出します。今回はカスタムイベントとイベントディスパッチャーという2大機能が登場し、言われるがままにブループリントを作ってきました。難しい箇所もあったので、一度今回の実装をまとめてみたいと思います。やりたかったこと床に仕掛けられたスイッチを踏むと、ふすまが開く仕掛けを作りました。追加機能として、5秒後に自動的にふすまが閉じるようにしました。今回登場したのは、ふすまを開くスイッチである[PNSwitchActor]、ふすま本体の[PNGateActor]、ステージ管理人である[PNStage01_GB]です。[PNSwitchActor]と[PNGateActor]はクラスブループリントで、[PNStage01_GB]はレベルブループリントです。以後、[PNSwitchActor]をスイッチ、[PNGateActor]をふすま、[PNStage01_GB]をレベルと呼びます。この章を勉強したとき、私は以下のような疑問を持っていました。Switch]から直接[Fusuma]の[Open]カスタムイベントを呼べばいいだけなのでは?《疑問2》イベントディスパッチャーというのを使う理由がわからないルール・制約ブループリントには以下のようなルールがあります。《ルール1》マップ上のアクター同士は、互いに相手の参照を知らない参照を知らないということは、相手のイベントを呼び出すことができないということです。このルールによって、《疑問1》に挙げたような、マップ上に配置されたスイッチはふすまの[Open]イベントを直接呼び出すことができません。実はアクターから他のアクターの情報を知る手段は用意されているのですが、原則としてはアクター同士は赤の他人状態です。このため、アクターAをきっかけとしてアクターBのイベントを呼ぶ場合は、一般的にレベルブループリントを経由します。《ルール2》マップ上のアクターはレベルの参照を得られないが、レベルからアクターの参照は得られるスイッチやふすま等のアクターは、他のアクターを知らないだけでなく、レベルに対してもイベントを呼び出すことができません。ステージ管理人であるレベルは、自分のマップに存在するアクターの参照を得ることができます。この仕組みを利用して問題を解決するのが《疑問2》で挙げた、イベントディスパッチャーです。カスタムイベントとイベントディスパッチャーの違いカスタムイベントを呼び出したい場合、呼び出す相手の参照が必要になります。電話をかけるために相手の連絡先が必要なイメージです。その特定の相手に対して「扉を開けて!」と指示を出します。相手の連絡先(参照)を知っているからイベントを呼び出せるイベントディスパッチャーの場合、自分は他の相手がいようがいまいが、「僕のスイッチがオンになりましたぁぁあ!!」と叫んでるイメージです。叫んでいるだけなので、相手の参照が必要というわけではありません。実際の処理としては、スイッチの下図の部分です。On]は[OnTurnedOn]イベントディスパッチャーを呼び出すという意味で、Target(対象)はself(自分)になっています。On!」と叫んでいるだけで何も起こりません。イベントディスパッチャーで重要なのは、相手が自分のことを知っていれば、自分の声をきっかけに動き出してくれるということです。伝えたい相手であるふすまは、アクター同士なのでスイッチの参照を得られませんが、レベルは管理人なのでスイッチとふすま両方の参照を得ることができます。そこでレベルがスイッチのイベントディスパッチャーの聞き手となり、スイッチの叫び声をきっかけにふすまのカスタムイベントを呼んであげるのです。実際の処理としては、レベルブループリントの下図の部分です。このように、マップ上のアクターの出来事をきっかけに他のアクターを動かしたい場合、レベルを経由するという組み方はステージ制作の基本的な考え方となります。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。