Fabで販売されているコマンドRPGを制作するためのプロジェクト『Turn-Based jRPG Template』の第10回。
#10 イベントを発生させるアクター
イベントを発生させるアクターを作成します。
今回は喋るイベントのみですが、様々なイベントに応用可能です。
イベントフラグで管理されているため、セーブ→ロードやレベル遷移にも対応しています。
環境
- エンジン: Unreal Engine 5.5.4
- プロジェクト: Turn-Based jRPG Template
イベントフラグの管理
ここは第6回でやった内容とほぼ同じです。
『Turn-Based jRPG Template』の使い方 #6 イベントフラグ管理
列挙型: E_MainEventを作成
名前: E_MainEvent
・第6回で作成済。
- MageJoins
- PriestJoins
- ArcherJoins
- OpeningTalk
- BossFound
OpeningTalkとBossFoundいうフラグを加えました。
詳細設定のビットマスクフラグに必ずチェックを入れてください。
セーブゲームの編集
第6回でやった内容とまったく同じです。
既にやっていたらスルーしてください。
『Turn-Based jRPG Template』のセーブゲームはBP_JRPGSaveGameです。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Controllers > BP_JRPGSaveGame)
変数追加
BP_JRPGSaveGameに変数を追加します。
変数
MainEvent – Integer
└詳細のビットマスクにチェックを入れて、ビットマスク列挙型をE_MainEventにする。
イベントグラフの編集
カスタムイベント SaveJRPGPlayerControllerしかありません。
セーブ項目にMainEventを加えるわけです。

・カスタムイベント SaveJRPGPlayerControllerにインプットを追加。名前はMainEventで型はInteger。
関数の編集
プレイヤーコントローラーに変数追加
第6回でやった内容とまったく同じです。
既にやっていたらスルーしてください。
BP_JRPGPlayerControllerを開く。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Controllers > BP_JRPGPlayerController)
変数
MainEvent – Integer
└詳細のビットマスクにチェックを入れて、ビットマスク列挙型をE_MainEventにする。
ゲームインスタンスの編集
第6回でやった内容とまったく同じです。
既にやっていたらスルーしてください。
BP_JRPGGameInstanceを開く。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Controllers > BP_JRPGGameInstance)
GameInstanceはレベル遷移してもデータがリセットされません。
PlayerControllerはレベル遷移でデータがリセットされます。
ですから、レベル遷移前などにPlayerControllerからGameInstanceにセーブし、レベル遷移後にロードするわけです。
そのためのセーブとロードの項目にMainEventを追加します。
イベントを発生させるアクターの作成
BP_EventBaseの作成
名前: BP_EventBase
・新規作成します。
コンポーネントの編集
- 現時点で必要なのはSphere Collisonのみです。
Sphere Collisonは接触判定に使いますから、位置とサイズを調整しましょう。 - 必要ならスケルタルメッシュやスタティックメッシュを追加しましょう。
変数の追加
- Prompt Start – Boolean
「インスタンス編集可能」にチェックを入れる
レベルを開いた瞬間にイベントを即開始するか、このアクターに接触して開始するかの選択です - Dialogue Title – Text
「インスタンス編集可能」にチェックを入れる
さらに詳細設定の「複数行」にチェックを入れる。インスタンス編集で改行できるようになります - Dialogue Text – Text (配列)
「インスタンス編集可能」にチェックを入れる - Dialogue Text Count – Integer
デフォルト値は0 - MainEvent – Integer
詳細のビットマスクにチェックを入れて、ビットマスク列挙型をE_MainEventにする。そして「インスタンス編集可能」にチェックを入れてください
BP_EventBaseの子ブループリントでBP_EventDialogue
BP_EventBaseの子ブループリントを作成し、名前をBP_Event_Dialogueにします。
配置とテストプレイ
レベルはGameplayを使います。
オープニングトーク
GameplayのPlayer Startと重なるようにBP_Event_Dialogueを配置。
BP_Event_Dialogueを選択し、詳細の
デフォルト > Dialogue Textに配列エレメントを追加して、オープニングのテキストを入力。
デフォルト > Dialogue Titleに喋っている人の名前を入力。
デフォルト > Main Event のOpningTalkにチェックを入れます。
デフォルト > Prompt Startにチェックを入れます。
ボス発見
Gameplayの廊下の突き当りのボスの前にBP_Eventを配置。
BP_Eventを選択し、詳細の
デフォルト > Dialogue Textに配列エレメントを追加して、オープニングのテキストを入力。
デフォルト > Main Event のBossFoundにチェックを入れます。
こちらは接触型イベントなのでPrompt Startにはチェックを入れません。
テストプレイすると、ゲーム開始と同時にオープニングトークが開始。
奥のボスのところで会話イベントが開始。
セーブ→ロードしてもフラグで管理されていますから再発生しません。
オプション: カメラ切り替え演出
BP_Event_Dialogueを開きます。
まずイベント Dialogue Eventの次にSet View Target with Blendを配置。

・これは現在のPlayer Controllerのカメラを、このアクターのカメラに切り替えるノードです。Blend Time 0.6は切り替え時間です。
・カメラが切り替え終わるまでテキストを表示したくなければ、Set View Target with Blendの後にDelayを置いてください。時間はBlend Timeと同じです。
そして末尾のDestroy Actorの前に、カメラを元のカメラに戻すためのSet View Target with Blendを配置します。
・元のカメラはPlayer Characterです。
・Set View Target with BlendのBlend Timeと同じ時間のDelayを配置します。DelayがないとDestroy ActorによってBlend Timeがキャンセルされます。
テストプレイ
BP_Event_Dialogueをレベルに配置。
詳細のCameraを選択し、レベル上でカメラの向きを調整します。
Dialogue TextやEvent Flagを設定してテスト。
このカメラは他のNPCにも同じように追加できますから、喋っているNPCにカメラを向けたりできます。
既存のインタラクトシステムを使わなかった理由
既存のインタラクトシステムを使おうとしましたが、レベルを開いた直後に会話イベントを開始したい場合、既存のインタラクトシステムではロード処理が遅れて正常に動作しないことがありました。
レベルを開くと同時に処理させるのには向いていません。
今回作成したBP_EventBaseでは、イベント BeginPlayの後にDelay(0.2)を入れています。
今のところ問題ないですが、これでも処理が遅れる場合、Delayの値を大きくする必要があります。その場合、プレイヤーキャラクターが動かないようにインプットを制限する必要もでてきます。
コメント