Fabで販売されているコマンドRPGを制作するためのプロジェクト『Turn-Based jRPG Template』の第4回。
#4 会話NPCと2人目の仲間
このテンプレートには会話するだけのNPCがいませんので作成します。
「はい」「いいえ」の選択肢も組み込み、それを利用して仲間になるNPCも作成しました。
環境
- エンジン: Unreal Engine 5.5.4
- プロジェクト: Turn-Based jRPG Template
会話NPCを作成
BP_NPCを複製して名前変更
BP_NPCを複製して名前変更します。名前はBP_TalkNPC
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Interactables > BP_NPC)
BP_NPCは、プレイヤーがインタラクトすると消滅します。
バトル用のNPCですね。
BP_TalkNPCの編集
変数の追加
- Dialogue Text – Text (配列)
「インスタンス編集可能」にチェックを入れる
詳細の「複数行」にチェックを入れるとインスタンス編集で改行できるようになります - Dialogue Text Count – Integer
デフォルト値は0
イベント BeginPlayのノード群の中のOnInteractedHandler以降を改造します。ここがプレイヤーがインタラクトした時のリアクションです。

・Dialogue Textの配列数とDialogue Text Countが連動し、Dialogue Textの配列数をDialogue Text Countが上回ったら会話を終えます。
・会話が終わった時にDialogue Text Countを0にリセットして、次に話しかけた時に最初から会話するようにしています。
・BP Info Dialogue ウィジェットを作成のDialogue Titleは、会話している人の名前です。空欄でも良いですし、変数化して「インスタンス編集可能」にしても良いでしょう。
・カスタムイベント End Talkを分けたのは、後で「はい」「いいえ」の選択肢を組み込むためです。
コンポーネントの編集: InteractionActor
・コンポーネントのInteractionActorを選択。
・詳細 > チャイルドアクタコンポーネント Child Actor Template > デフォルト > Interaction Text を「話す」に書き換える。
テストプレイ
BP_TalkNPCをレベルに配置してから、それを選択。
デフォルト > Dialogue Textに配列エレメントを追加して会話内容を入力。
「はい」「いいえ」の選択肢
このテンプレートにはBP_YesNoDialogueという「はい」「いいえ」のUIが用意されていますので、これを会話NPCに組み込みます。
BP_YesNoDialogueをノードに組み込む時の基本的な形

・Dialogue Text: NPCのコメント
・Dialogue Title: NPCの名前
・In Text: 「はい」「いいえ」の選択にしていますが、これを変えることもできます。
・カスタムイベント Select Yesの後に、「はい」を選択した場合のノードを組む。
・カスタムイベント Select Noの後に、「いいえ」を選択した場合のノードを組む。
「はい」「いいえ」の選択肢を組み込む
ブランチ Trueの後のEnd Talkの前にYes or Noを配置するだけです。
テストプレイ
通常の会話テキストを全て表示した後、「はい」「いいえ」の選択がある質問テキストが表示されます。
通常の会話テキストを空にしておけば、いきなり「はい」「いいえ」の選択がある質問テキストが表示されます。

・On Loadedにイベントをバインド→OnLoadedHandlerは、インタラクト済のアクターが、セーブ→ロードやレベル遷移後に再読み込みされた時の処理です。この処理がなかった場合、NPCに話しかけてからセーブ→ロードすると話しかけられない状態になります。
2人目の仲間を加える
「はい」「いいえ」の選択肢がある会話NPCを使って、2人目の仲間を作成します。
BP_TalkNPCを複製して名前変更
BP_TalkNPCを複製して名前変更。名前は何でもいいですが、今回はBP_TalkNPC_Player2にしました。
メッシュとアニメーションの変更は任意で。
BP_TalkNPC_Player2の編集
カスタムイベント Yes or Noの
Dialogue Textを「私の力が必要かい?」
Dialogue Titleを「謎の傭兵」
にしました。
ちなみにIs Yes Selected (True)は、最初にカーソルが「はい」を選択している状態にしています。
変数のDialogue Textは空っぽにします。
話しかけた時、いきなり「はい」「いいえ」の選択がある質問を表示させます。
カスタムイベント Yes or Noの「はい」を選択した場合の処理にノードを追加します。

・Add Player Unitには、加えたいユニットを指定します。今回はBP_MagePlayerを指定しています。
・Add to Partyは必須ではありません。これを使わなかった場合、3人のパーティーメンバーではなく控えメンバーに登録されます。今回はBP_MagePlayerをパーティーメンバーに加えています。
当初、私はBP_JRPGPlayerControllerの変数partySizeを1にしていましたが、これはデフォルト値の3のままで問題ないことに気付きました。
partySizeが3で、実際のパーティーメンバーが1人の場合、余った2枠にはEmptyと表示されます。
フィールド探索モード中、仲間キャラクターはAIでプレイヤーを追従します。そのため、レベルにナビメッシュバウンズボリュームの設置が必要です。
注意点
現時点ではイベントフラグ管理がありません。
BP_TalkNPC_Player2を仲間に加えた後、レベル遷移したりセーブ→ロードすると、BP_TalkNPC_Player2が復活してしまいます。
第5回でレベル遷移、第6回でイベントフラグ管理をして、この問題が解決します。
コメント