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

野生エンカウントシステム

エンカウントシステムは、プレイヤーがワールドを探索する際に、いつ・どの野生モンスターが出現するかを決定します。MCE は複数のエンカウント方法、設定可能な確率テーブル、レベル範囲、時間帯別エンカウントに対応しています。

エンカウントの仕組み

  1. プレイヤーがエンカウントデータを持つタイルの上を歩きます。
  2. 各歩数ごとに、システムがエンカウント率に対して判定を行います。
  3. 判定に成功すると、タイルのエンカウントテーブルから重み付き確率に基づいてモンスターが選択されます。
  4. 選択されたモンスターの種族、レベル、フォーム情報を含む BattleParameters オブジェクトが作成されます。
  5. BattleLauncher がバトルシーンに遷移します。

WildEncountersSet

WildEncountersSet ScriptableObject は、特定のエリアのエンカウントテーブルを定義します:

作成場所:Assets > Create > OpenMon > Wild Encounters Set

セット内の各エントリには以下が含まれます:

フィールド説明
MonsterMonsterEntry ScriptableObject への参照
Min Level野生モンスターの最低レベル
Max Level野生モンスターの最高レベル
Probabilityこのエントリの相対的な重み(高いほど出現しやすい)

実際のレベルはエンカウントがトリガーされるたびに Min と Max の間からランダムに選ばれます。

確率の計算

確率は%ではなく相対的な重みです。システムはすべての重みを合計し、各エントリの確率を計算します:

確率 = エントリの重み / 全重みの合計

テーブルの例:

モンスター重み実際の確率
Leafpup4040/100 = 40%
Windling3030/100 = 30%
Silkworm2020/100 = 20%
Sparkbit1010/100 = 10%

エンカウントタイプ

MCE は EncounterType 列挙型を通じて異なるエンカウント方法に対応しています:

タイプトリガー説明
Walking草むらや洞窟を歩く標準的なフィールドエンカウント
Surfing水上タイルでなみのり水面のエンカウント
Fishing水上でつりざおを使用つりざおベースのエンカウント(ボロのつりざお、いいつりざお、すごいつりざお)
RockSmash壊せる岩にいわくだきを使用岩ベースのエンカウント
Headbutt木にずつきを使用木ベースのエンカウント

WildEncountersSet にはタイプ別のエンカウントを設定できます。現在のアクション(歩行、なみのり、つり)に一致するエンカウントのみが考慮されます。

エンカウントゾーンのセットアップ

方法 1:EncounterTile コンポーネント

  1. シーンのマップヒエラルキーに空の GameObject を作成。
  2. EncounterTile コンポーネントを追加。
  3. Encounters フィールドに WildEncountersSet を割り当て。
  4. エンカウントゾーンを目的のタイルをカバーするように配置・サイズ調整。

方法 2:SceneInfo デフォルトエンカウント

各シーンの SceneInfo にデフォルトの WildEncountersSet を設定できます。シーン内の歩行可能な草タイルは、特定の EncounterTile でオーバーライドされない限り、このエンカウントテーブルを使用します。

方法 3:タイルごとのエンカウント

きめ細かい制御のために、同じマップの異なるエリアに異なるエンカウントセットを割り当てることができます。異なる領域をカバーする複数の EncounterTile コンポーネントを配置してください。

エンカウント率

エンカウント率は歩数あたりのエンカウント発生頻度を制御します:

  • 基本率:エンカウントゾーンごとに設定(典型的な範囲:5-25%)。
  • 修正値:アイテム(例:むしよけスプレーで0%に減少)、特性(例:あくしゅうで率減少)、アイテム(例:きよめのおふだ)。
  • 歩数カウンター:前回のエンカウントからの歩数を追跡。長い間エンカウントがない場合、率がわずかに上昇して長い空白を防止。

時間帯別エンカウント

異なる時間帯に異なるモンスターが出現します:

時間帯時間
06:00 - 11:59
12:00 - 17:59
夕方18:00 - 20:59
21:00 - 05:59

時間帯別エンカウントを設定するには、各時間帯用の個別の WildEncountersSet アセットを作成し、エンカウントゾーンの時間帯設定で割り当てます。

フォームエンカウント

一部の種族には条件に基づいて異なる姿で出現するフォームがあります。EncounterFormCalculator が野生モンスターのスポーンフォームを決定します:

  • リージョンフォーム:マップのリージョンタグに基づく。
  • 季節フォーム:ゲーム内カレンダーに基づく。
  • ランダムフォーム:利用可能なフォームからランダムに選択。

特定のフォームを強制するには、エンカウントエントリで SingleFormEncounter コンポーネントを使用します。

特殊なエンカウントパターン

つり

つりエンカウントでは、プレイヤーが水タイルに向かってつりざおアイテムを使用する必要があります:

  1. EncounterType.Fishing エントリを持つ WildEncountersSet を作成。
  2. 水エリアのエンカウント設定に割り当て。
  3. つりざおのティア(ボロのつりざお、いいつりざお、すごいつりざお)で利用可能なエントリがフィルタリング。

伝説 / 一回限りのエンカウント

1回だけ発生する特殊エンカウントの場合:

  1. ランダムエンカウントの代わりに CommandGraph イベントを使用。
  2. イベントがバトルをトリガーする前にゲーム変数(例:LegendaryDefeated)をチェック。
  3. バトル後に変数を設定して再エンカウントを防止。
  4. この方法ではエンカウントのコンテキスト(カットシーン、会話、地形)を完全に制御できます。

群れエンカウント

複数の野生モンスターが同時に出現:

  • エンカウントエントリに群れフラグを設定。
  • バトルで指定された種族のモンスターが3-5体出現。
  • プレイヤーは1体ずつ戦うか、グループをターゲットにできます(範囲技がサポートされている場合)。

むしよけスプレーとエンカウント防止

プレイヤーはアイテムを使用してエンカウントを防止できます:

アイテム効果持続
むしよけスプレープレイヤーの先頭モンスターより低いレベルのエンカウントを防止100歩
シルバースプレー同じ効果、長い持続200歩
ゴールドスプレー同じ効果、最長の持続250歩

むしよけスプレーは歩数カウンターとして実装されています。エンカウントシステムはエンカウント判定前にスプレーカウンターをチェックします。

エンカウントユーティリティ

EncounterUtils クラスがヘルパーメソッドを提供します:

// 現在のタイルでエンカウント可能かチェック
bool canEncounter = EncounterUtils.CanEncounterAt(position, encounterType);

// 位置に対するエンカウントセットを取得
WildEncountersSet set = EncounterUtils.GetEncounterSet(position, encounterType);

// エンカウント判定(エンカウントが発生しない場合は null を返す)
WildEncounter encounter = EncounterUtils.RollEncounter(set);

ベストプラクティス

  1. エンカウント率のバランスを取りましょう。高すぎる(25%以上)とストレスに感じます。低すぎる(5%未満)とワールドが空っぽに感じます。8-15%が典型的です。
  2. レベルを進行度に合わせてスケールしましょう。ルート1にはレベル2-5のモンスターを配置し、レベル50は避けてください。
  3. マップ間でエンカウントテーブルを変えましょう。各ルートに個性を持たせてください。
  4. レアなエンカウントを含めましょう。テーブルごとに5%のエントリが1つあると、プレイヤーに探索の動機を与えます。
  5. 時間帯別エンカウントをテストしましょう。特定の時間にプレイすることでプレイヤーが不利にならないようにしてください。
  6. むしよけスプレーは早めに配置しましょう。中盤前にエンカウント制御手段があるとプレイヤーに好まれます。