メインコンテンツまでスキップ

最初のバトルをセットアップ

このガイドでは、エンカウントゾーンの設定、野生バトルのトリガー、バトルフローの理解方法を説明します。完了すると、エディタでテスト可能な動作するバトルが出来上がります。

前提条件

  • MCE がインストールされ、セットアップウィザードが完了していること。
  • データベースに少なくとも1体のモンスターがあること(同梱の151体またはあなたが作成したもの)。
  • プレイヤーキャラクターとグリッドベースのタイルマップを持つシーンがあること。

ステップ 1:エンカウントゾーンの作成

野生バトルはタイルマップ上のエンカウントタイルによってトリガーされます。設定方法は以下の通りです:

  1. シーンヒエラルキーで、エンカウントを配置したいタイルマップレイヤー(通常は「Grass」または「TallGrass」レイヤー)を選択します。
  2. グリッドの子として新しい空の GameObject を作成します:Right-click > Create Empty、名前を GrassEncounters にします。
  3. この GameObject に EncounterTile コンポーネントを追加します。
  4. タイルベースの座標を使用して、エンカウントが発生するタイル上に配置します。

または、MCE のエンカウントタイルタイプを使用して、専用のタイルマップレイヤーにエンカウントゾーンを直接ペイントすることもできます。

ステップ 2:エンカウントテーブルの設定

EncounterTile コンポーネントは WildEncountersSet ScriptableObject を参照します。以下のように作成します:

  1. Assets > Create > OpenMon > Wild Encounters Set
  2. わかりやすい名前を付けます(例:Route1_GrassEncounters)。
  3. ScriptableObject を開いてエンカウントを設定します:
フィールド説明
Monster出現する種族の MonsterEntry ScriptableObject
Min Level野生モンスターの最低レベル
Max Level野生モンスターの最高レベル
Probabilityエンカウント重み(高いほど出現しやすい)
Encounter Typeエンカウントのトリガー条件(Walking、Surfing、Fishing など)

バリエーションを作るために複数のエントリを追加します。例:

モンスターレベル範囲確率
Flameleon3-540
Leaflet3-540
Sparkit4-620
  1. この WildEncountersSetEncounterTile コンポーネントの Encounters フィールドに割り当てます。

ステップ 3:バトルシーンのセットアップ

MCE はバトル開始時にアディティブにロードされる専用のバトルシーンを使用します。必要なもの:

  1. フィールドマップシーンにある BattleLauncher コンポーネント。通常は永続的なマネージャー GameObject 上に配置されています。セットアップウィザードを使用した場合は、すでに存在しているはずです。
  2. ビルド設定に登録されたバトルシーン。デフォルトのバトルシーンは MCE に含まれています。

BattleLauncher は遷移を処理します:

  • 画面をフェードします。
  • バトルシーンをアディティブにロードします。
  • 正しいパラメータで BattleManager をインスタンス化します。
  • バトル終了後にフィールドマップに戻ります。

BattleManager コンポーネント

BattleManager はバトルシステムの中核です。バトルシーンには BattleManager コンポーネントを持つ GameObject があり、以下の主要モジュールによるモジュラーアーキテクチャを使用しています:

モジュール目的
BattlersModule両サイドのバトラーインスタンスを管理
HealthModuleHP追跡、ひんし判定、回復
MovesModule技の実行、PP管理、タイプ相性
ItemsModuleバトル中のアイテム使用
CaptureModule野生モンスターの捕獲メカニクス
AIModule敵の意思決定
AnimationModuleバトルアニメーションとビジュアルエフェクト
AudioModuleバトル音楽と効果音
StatusesModule状態異常(やけど、どく、ねむりなど)
BattlerStatsModuleステータス段階と変化
BattlerSwitchModuleパーティメンバーの交代
RostersModuleバトル中のパーティ管理
ScenariosModuleバトルタイプの設定(野生、トレーナーなど)
MegaModuleメガシンカの発動
CharactersModuleトレーナースプライトの表示

これらを個別に設定する必要はありません。BattleManager が Zenject 依存性注入により自動的にすべてを接続します。

ステップ 4:BattleStateMachine の設定

BattleStateMachine がバトルフローを制御します:

Start → Introduction → Turn Selection → Action Execution →
→ Check Fainted → Replace Fainted → Turn End →
→ [loop back to Turn Selection or] → Battle End → Results

ステートマシンはバトルシーンプレハブに事前設定されています。各ステートはバトル条件に基づいて自動的に遷移を処理します。

ステップ 5:バトルのテスト

  1. フィールドマップシーンに以下があることを確認します:

    • 少なくとも1体のモンスターを含む手持ちを持つ PlayerCharacter
    • 設定済みの WildEncountersSet を持つ EncounterTile
    • マネージャー GameObject 上の BattleLauncher
  2. エディタで Play を押します。

  3. キャラクターをエンカウントゾーンに歩かせます。

  4. 数歩後(エンカウント率により決定)、バトルがトリガーされます。

クイックテスト

歩き回らずにバトルをすぐテストするには:

  1. EncounterTile のエンカウント率を100%に設定します。
  2. または、BattleLauncher コンポーネントを直接使用して、テストスクリプトからそのランチメソッドを呼び出します。

バトルフローの理解

バトルが開始すると、内部では以下の処理が行われます:

  1. BattleLauncherEncounterTile からエンカウントトリガーを受信します。
  2. 野生モンスターのデータを含む BattleParameters オブジェクトが作成されます。
  3. バトルシーンがアディティブにロードされます。
  4. BattleManager がすべてのモジュールを初期化します。
  5. BattleStateMachineIntroduction ステートに入ります(野生モンスターの表示、鳴き声の再生)。
  6. プレイヤーにアクション選択が提示されます:たたかうバッグモンスターにげる
  7. アクションがすばやさ順に実行されます。
  8. 一方のサイドがひんしになるか、プレイヤーが逃走/捕獲するまでループが継続します。
  9. BattleResultParameters がフィールドマップに返されます(獲得経験値、使用アイテム、捕獲モンスターなど)。
  10. バトルシーンがアンロードされ、フィールドマップが再開します。

バトルタイプ

MCE は標準で複数のバトルタイプに対応しています:

タイプ説明
Wild単体の野生モンスターエンカウント、捕獲可能
TrainerNPCトレーナーバトル、捕獲不可、勝利時に賞金獲得
Double2対2のバトル形式
Scripted特殊条件付きのストーリーバトル

バトルタイプは BattleParameters で渡される BattleType 列挙型によって決定されます。

バトルイベントのリスニング(DLLユーザー向け)

Lite、Basic、Pro ティア(ソースコードなし)を使用している場合でも、SDK を通じてバトルイベントに応答できます:

using OpenMon.MCE.SDK;

public class MyBattleTracker : MonoBehaviour
{
[Inject] private IBattleSystem battleSystem;

private void OnEnable()
{
battleSystem.OnBattleStarted += HandleBattleStarted;
battleSystem.OnBattleEnded += HandleBattleEnded;
}

private void OnDisable()
{
battleSystem.OnBattleStarted -= HandleBattleStarted;
battleSystem.OnBattleEnded -= HandleBattleEnded;
}

private void HandleBattleStarted()
{
Debug.Log("A battle has started!");
}

private void HandleBattleEnded(bool playerWon)
{
Debug.Log($"Battle ended. Player won: {playerWon}");
}
}

MCE をソースコードなしで拡張する方法については、パブリックAPIガイドをご覧ください。

トラブルシューティング

問題解決方法
バトルがトリガーされないEncounterTile に有効な WildEncountersSet が割り当てられているか確認してください
エンカウント後に画面が真っ黒バトルシーンが Build Settings のシーンリストに含まれているか確認してください
モンスターがレベル0で出現エンカウントテーブルで Min Level と Max Level が設定されているか確認してください
バトル音楽が鳴らないBattleManagerAudioModule にオーディオクリップが割り当てられているか確認してください
バトル開始時にクラッシュMCE > Tools > Asset Validation を実行して、不足しているデータベース参照を確認してください

次のステップ