『Turn-Based jRPG Template』の使い方 #2 新規レベルに敵を配置

Fabで販売されているコマンドRPGを制作するためのプロジェクト『Turn-Based jRPG Template』の第2回。

#2 新規レベルに敵を配置

レベルに敵を配置すると、急にRPGっぽくなります。

環境

レベルを追加

私はFabで販売されているModular Dungeon Collectionを使いました。
丁度、2025年5月6日23時~5月20日23時まで無料配布されていました。

練習なのでレベルは何でも良いです。
ファイル > 新規レベル で新規レベルを作成しても良いです。

ゲームモードの設定

追加したレベルを開きます。
ワールドセッティングの Game Mode > ゲームモードオーバーライド にBP_JRPGGameModeを指定します。

プレイヤースタートを配置して、テストプレイ。

敵と戦うまで

シンボルエンカウントで敵と戦うまでの行程。

BP_BattleControllerの配置

BP_BattleControllerは、バトル用のコントローラーです。
レベルのどこでもいいので、BP_BattleControllerを配置します。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Battle  > BP_BattleController)

デフォルトの編集
レベルに配置したBP_BattleControllerを選択して、 詳細 > デフォルト

  • Battle Transitionは、バトルに切り替わった時の演出。最もオーソドックスな仕様のBP_FadeBattleTransitionを指定。
  • Should Units Move to Targetは、近接攻撃時にターゲットまで近づいて攻撃するかどうか。
  • Show Turn Order UIは、バトル時に攻撃順を画面右側に表示するかどうか。
  • Turn Typeは、ActionTimeだとFFシリーズのATBゲージのようなゲージが表示され、Speedでは非表示でSpeed順に行動する。
  • Main Menu Map Nameは、メインメニューの背景となるレベル。デフォルト設定のMainMenuで良いです。
  • フィールド曲、戦闘曲、勝利曲、敗北曲もここで設定可能です。

BP_*****SpawnLocationの配置

BP_EnemySpawnLocationとBP_PlayerSpawnLocationは、バトル時にエネミーとプレイヤーが配置される場所です。
レベル内の広いスペースをバトルフィールドにして、そこに配置しましょう。
エネミー3体、プレイヤー3人が向かい合うように配置します。

BP_EnemySpawnLocationをレベル上に配置。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Battle > BP_EnemySpawnLocation)

BP_PlayerSpawnLocationをレベル上に配置。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Battle > BP_PlayerSpawnLocation)

BP_Cameraの配置

BP_Cameraは、バトル開始時、最初に使われるカメラです。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Battle  > BP_Camera)

BP_Cameraをレベル上に配置する

BP_*****SpawnLocationを全体を見下ろすように配置しても良いですし、エネミーだけを移すようにBP_EnemySpawnLocationに向けて配置しても良いでしょう。

次に設定するBP_InteractionBattleのデフォルト > Dynamic Cameraのチェックを外した場合、BP_Cameraのみの固定視点になります。
Dynamic Cameraにチェックが入っている場合、プレイヤーのコマンド入力時に、そのプレイヤーの後方のカメラに切り替わる。

BP_InteractionBattleの配置

BP_InteractionBattleは、シンボルエンカウントバトルの基本設定となるブループリントです。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Battle  > BP_InteractionBattle)

レベル上に配置します。
これを配置した時の水色の球体の範囲内で、エネミーがプレイヤーを見つけると追ってきます。
水色の球体の範囲外では追ってきませんが、接触するとバトルになります。

デフォルトの編集
レベル上に配置したBP_InteractionBattleを選択して、詳細 > デフォルト

  • Battle ControllerにBP_BattleControllerを指定。
  • Radiusでエネミーがプレイヤーを発見する範囲を設定。
  • Dynamic Cameraのチェックを外すと、固定カメラのみのバトルとなります。
  • Static CameraにBP_Cameraを指定。
  • Enemy Spawn LocationsにBP_EnemySpawnLocationを3つ指定。
  • Player Spawn LocationsにBP_PlayerSpawnLocationを3つ指定。
  • Flee Chanceはプレイヤーが逃げられる確率です。100.0で100%です。

エネミーの配置

ナビメッシュ バウンズ ボリュームをレベル上に配置


エネミーはAIで動き回りますから、ナビメッシュ バウンズ ボリュームをレベル上配置する必要があります。これを配置しないとエネミーは動きません。

ナビメッシュ バウンズ ボリュームの範囲内でのみ、エネミーのAIが機能して動き回ります。

BP_AggressiveEnemyExplorePawnsをレベル上に配置

BP_AggressiveEnemyExplorePawnsは、レベル内を歩き回り、プレイヤーを見つけると追いかけてくるエネミーです。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > EnemyExplorePawns > AggressiveEnemyExplorePawns > BP_AggressiveEnemyExplorePawns)

BP_AggressiveEnemyExplorePawnsをレベル上に配置します。

デフォルトの編集
レベル上に配置したBP_AggressiveEnemyExplorePawnsを選択して、詳細 > デフォルト

  • BattleにBP_InteractionBattleを指定。
    これで配置したエネミーとBP_InteractionBattleが連動します。
  • Respawn After Loadは、Level遷移によるエリア切り替えや、セーブ→ロードでエネミーが復活するかどうかです。チェックが入っていると復活します。
    1度しか戦えないボスなどはチェックを外す。
出現するエネミーの指定

レベル上に配置したBP_AggressiveEnemyExplorePawnsを選択して、詳細 > デフォルト
Enemy Listで+をクリック。
追加されたインデックス[0]の下のenemyListで+をクリックすると、エネミーを指定できます。

接触時にどんなエネミーが出現するかの設定は、3パターン紹介します。

【エネミー1体 WeakEnemyかAverageEnemyかのランダム】
現在: インデックス[0]のみ / enemyListは1枠のみ

enemyList(1枠目)のNoneのところをBP_WeakEnemyに指定。

enemyListで+をクリックして、enemyListの2枠目を追加。
enemyList(2枠目)のNoneのところをBP_AverageEnemyに指定。

それぞれのspawnChanceを0.5にする。
プレイヤーが接触した時、50%の確率でどちらかが出現します。

minLevelとmaxLevelはエネミーのレベル設定です。
minLevel1でmaxLevel5なら、出現したエネミーのレベルが1~5でランダムに決まります。

【エネミー2体 WeakEnemyとAverageEnemy】
現在: インデックス[0]のみ / enemyListは1枠のみ

インデックス[0]のenemyListにBP_WeakEnemyを指定。

Enemy Listで+をクリックして、インデックス[1]を作成。
インデックス[1]のenemyListを追加し、BP_BP_AverageEnemyを指定。

ちなみにspawnChanceを0.0にしても、今回のようにそれぞれのインデックスにエネミーが1体しか登録されていなければスポーンします。

【エネミー1体かエネミー2体かのランダム】
現在: インデックス[0]のみ / enemyListは1枠のみ

インデックス[0]のenemyListにBP_WeakEnemyを指定。
spawnChanceは1.0。
インデックス[0]のエネミーは必ず出現します。

Enemy Listで+をクリックして、インデックス[1]を作成。
インデックス[1]のenemyList(1枠目)にBP_WeakEnemyを指定。
spawnChanceは0.5。
インデックス[1]のenemyListを追加して2枠目はNoneのまま。
spawnChanceは0.5。
これでインデックス[1]はBP_WeakEnemyとNoneがそれぞれ50%になり、エネミーが出現したりしなかったりします。

BP_EnemySpawnLocationを3つ配置していますから、インデックス[2]まで使用可能です。
BP_EnemySpawnLocationを4つ配置したら、インデックス[3]まで使用可能という具合。

エネミーの作成

バトルエネミー

BP_WeakEnemyを複製して名前変更。
Skeletal Mesh AssetとAnimクラスの変更。
デフォルト、統計、アニメーションの設定。

フィールドエネミー

作成不要。
BP_AverageEnemyExplorePawnを配置して、Skeletal Mesh Assetを変更すれば良いです。

日本語化と効果音

バトルコマンドの日本語化

BP_ActionUIでバトルコマンドを日本語化できます。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > UI > BP_ActionUI)
ItemButtonやSkillButtonを選択し、デフォルト > Actionの欄に「アイテム」や「スキル」と入力。その下のAction Imageでボタン画像を変更できます。

その他、戦闘に関するUI。
必要に応じて日本語化しましょう。

敗北時のUIは、BP_DefeatDialogue
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > UI > Dialogues > BP_DefeatDialogue)

勝利時のUIは、BP_VictoryDialogue
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > UI > Dialogues > BP_VictoryDialogue)

レベルアップ時のUIは、BP_LevelUpDialogue
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > UI > Dialogues > BP_LevelUpDialogue)

ボタンを押した時の効果音

ボタンを押した時の効果音は、BP_JRPGFunctionLibraryのPlayConfirmSoundで管理されています。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Controllers > BP_JRPGFunctionLibrary > PlayConfirmSound)

不具合?

BP_AggressiveEnemyExplorePawnsが自動バトルにならなくなった

BP_AggressiveEnemyExplorePawnsに接触してもバトルにならず「「INTERACT」が表示されるようになる不具合がありました。

状況は、まずこのテンプレートをインストールして、すぐにテストプレイ。
スタート位置から右側2つめの部屋にBP_AggressiveEnemyExplorePawnsが配置されていて、近づくと自動で戦闘になりました。この時、クリック音が入ってしまっていた。

インタラクトを管理しているBP_InteractionDetectorを開く。
(場所: コンテンツ > TurnBasedJRPGTemplate > Blueprints > Interactables > BP_InteractionDetector)
コンパイルしてから再びテストプレイすると、BP_AggressiveEnemyExplorePawnsに近づいても自動で戦闘にならず「INTERACT」が表示されるようになりました。

BP_AggressiveEnemyExplorePawnsのコンポーネントのInteractionActorを選択。
詳細の チャイルドアクタコンポーネント > Child Actor Template がリセットされたようです。
Child Actor Templateが指定できませんので、手動で入力。

これで接触しただけでエンカウントされます。
Child Actor Templateとデフォルトが表示されないようでしたら、子アクタクラスをNoneにしてから、BP_InteractionDetectorを選びなおしてください。

接触時のクリック音を消すには、BP_InteractionDetectorのイベントグラフのイベント BeginPlayを見ます。
カスタムイベント OnInteractedHandlerの後に変数forceinteractionをGetしてブランチを配置。

これでForce Interactionにチェックが入っている時は、クリック音がスルーされます。

ちなみに接触判定は、キャラクターの正面に球体があります。
ですから、正面同士で接触すると、ちょっと離れている距離で戦闘に入ります。

エネミー2体の同時接触の問題とエネミー情報の取得ミス

何度もテストプレイしていると、シンボルエンカウントで2つの不具合がありました。

  • エネミー2体とまったく同時に接触した時、同時に読み込んでバトルが発生してしまう。プレイヤーキャラクターも2倍になってしまう。
  • エネミーとの接触の仕方によっては、エネミー情報が取得されず、バトルが開始しても進行不能状態。

滅多に発生しない不具合ですが、対応しておく必要があります。
これらの状況になった時、バトルをキャンセルするようにしました。

BP_BattleControllerの編集
ノードの編集
イベントInitBattleを改造します。

・エネミー情報の取得ミスの対応は、Enemy Unitsの中身が空だった時、Switch to Explore Modeに繋いでフィールド探索モードに戻る。
・エネミー2体の同時接触の対応は、バトル時に読み込まれたPlayer UnitsとJ RPG Controllerに記録されているPlayer Unitsの数が同じかを確認します。同時接触で2倍になっていればSwitch to Explore Modeに繋いでフィールド探索モードに戻る。
BP_EnemyExplorePawnBaseの編集
ノードの編集
カスタムイベント StopAIの後を改造します

・バトルをキャンセルした場合、AIControllerが存在していない場合がありますから、IS Validを配置して存在を確認します。
『Turn-Based jRPG Template』は100%ブループリントのプロジェクトですから、プログラミング知識がなくても改造しやすいです。

コメント

タイトルとURLをコピーしました