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

進化システム

MCE はポリモーフィックなコマンドパターンにより30種類以上の進化タイプに対応しています。各進化タイプは EvolutionData を継承する具象クラスであり、独自のトリガー条件を定義します。このガイドでは、すべての組み込み進化タイプとその設定方法を解説します。

進化の仕組み

進化は EvolutionManager によって管理され、以下の重要なタイミングで進化条件がチェックされます:

  • レベルアップ後(バトル内またはふしぎなアメ使用時)。
  • アイテム使用後(モンスターにアイテムを使用した時)。
  • 通信交換後(交換完了時)。
  • 特定のゲームイベント時(なつき度の閾値到達、特定の場所への進入など)。

条件が満たされると、EvolutionAnimation が再生され、MonsterInstance が進化先の種族に変化します。ニックネーム、個体値、努力値、なつき度などの個人データは保持されます。

進化の設定

MonsterEntry ScriptableObject の Evolutions 配列に、1つ以上の EvolutionData エントリを格納します。各エントリは以下を指定します:

  1. 進化タイプ(使用する具象クラス)。
  2. 進化先の種族MonsterEntry への参照)。
  3. 進化先のフォーム(任意、フォーム固有の進化の場合)。
  4. タイプ固有のパラメータ(レベル閾値、必要アイテムなど)。

組み込み進化タイプ

レベルベース

タイプ説明パラメータ
EvolveByLevel特定のレベルで進化RequiredLevel
EvolveByLevelAtSpecificTime特定のレベルかつ特定の時間帯で進化RequiredLevelTimeOfDay
EvolveByLevelWhenAttackIsHigherThanDefense特定のレベルかつ こうげき > ぼうぎょ で進化RequiredLevel
EvolveByLevelWhenDefenseIsHigherThanAttack特定のレベルかつ ぼうぎょ > こうげき で進化RequiredLevel
EvolveByLevelWhenAttackEqualsDefense特定のレベルかつ こうげき = ぼうぎょ で進化RequiredLevel
EvolveByLevelWhenSpecificGender特定のレベルかつ特定の性別で進化RequiredLevelGender
EvolveByLevelWithSceneTag特定のレベルかつ特定の場所で進化RequiredLevelSceneTag
EvolveByLevelWithSceneTagAtSpecificTimeレベル + 場所 + 時間帯RequiredLevelSceneTagTimeOfDay
EvolveToRandomSpeciesByLevel特定のレベルでリストからランダムな種族に進化RequiredLevelPossibleTargets[]

なつき度ベース

タイプ説明パラメータ
EvolveByFriendshipなつき度が閾値に達すると進化RequiredFriendship
EvolveByFriendshipAtSpecificTimeなつき度 + 時間帯RequiredFriendshipTimeOfDay
EvolveByFriendshipWithMoveOfTypeなつき度 + 特定タイプの技を所持RequiredFriendshipMoveType

アイテムベース

タイプ説明パラメータ
EvolveOnItemUse特定のアイテムを使用すると進化RequiredItem
EvolveOnItemUseAtSpecificTimeアイテム + 時間帯RequiredItemTimeOfDay
EvolveOnItemUseOnSpecificGenderアイテム + 特定の性別RequiredItemGender
EvolveOnItemUseWithSceneTagアイテム + 特定の場所RequiredItemSceneTag
EvolveOnLevelUpHoldingItemアイテムを持たせてレベルアップRequiredLevelHeldItem
EvolveOnLevelUpHoldingItemAtSpecificTimeレベル + 持ち物 + 時間帯RequiredLevelHeldItemTimeOfDay

通信交換ベース

タイプ説明パラメータ
EvolveWhenTraded交換時に進化(なし)
EvolveWhenTradedHoldingItemアイテムを持たせた状態で交換すると進化HeldItem
EvolveWhenTradedWithMonster特定の種族と交換すると進化RequiredPartner

技ベース

タイプ説明パラメータ
EvolveOnLevelUpWhenAMoveHasBeenLearnt特定の技を所持してレベルアップRequiredMove
EvolveOnLevelUpWhenAMoveHasBeenLearntWithSceneTag技 + 場所RequiredMoveSceneTag
EvolveToRandomFormOnLevelUpWhenAMoveHasBeenLearntレベル + 技、ランダムなフォームに進化RequiredMovePossibleForms[]
EvolveByUsingMoveXTimesバトル中に特定の技をX回使用すると進化RequiredMoveTimesRequired

条件ベース

タイプ説明パラメータ
EvolveOnLevelUpWithOtherMonInPartyパーティに特定の種族がいる状態でレベルアップRequiredPartyMember
EvolveOnLevelUpWhenConditionHasLevelゲーム条件が特定のレベルに達した状態でレベルアップConditionConditionLevel
EvolveByEvolutionCounterX体の他のモンスターを進化させた後に進化RequiredCount

バトル条件ベース

タイプ説明パラメータ
EvolveByCriticalHitCounter1回のバトルでX回の急所を当てると進化CriticalHitsRequired
EvolveByDefeatingRivalsX人のライバルトレーナーを倒すと進化RivalsRequired
EvolveByRecoilDamageBasedOnGender反動ダメージを受けると進化(性別依存)GenderRecoilThreshold

特殊

タイプ説明パラメータ
NincadaEvolution特殊な二重進化(1体から2体のモンスターを生成)SecondSpecies

進化チェーンのセットアップ

以下は3段階の進化チェーンの完全な例です:

ステージ 1: Flameleon (図鑑 #152)

Flameleon の MonsterEntry に1つの進化を追加:

  • タイプ:EvolveByLevel
  • 進化先:Blazeking
  • 必要レベル:16

ステージ 2: Blazeking (図鑑 #153)

Blazeking の MonsterEntry に2つの進化を追加(分岐):

  • 進化 1:
    • タイプ:EvolveByLevel
    • 進化先:Infernarch
    • 必要レベル:36
  • 進化 2:
    • タイプ:EvolveOnItemUse
    • 進化先:Infernarch(メガフォーム)
    • 必要アイテム:Fire Stone

ステージ 3: Infernarch (図鑑 #154)

進化なし(最終段階)。Evolutions 配列を空のままにします。

フォームチェンジ vs 進化

すべての変化が進化というわけではありません。MCE は以下を区別します:

メカニズム永続?新しいインスタンスを作成?
進化はいいいえ(同じインスタンス、新しい種族)Flameleon が Blazeking に進化
フォームチェンジ場合によるいいえ(同じインスタンス、同じ種族)季節フォーム、バトル限定フォーム
アイテムベースフォーム可逆いいえChangeFormOnItemUseChangeBetweenMultipleFormsOnItemUse

フォームチェンジは進化データの代わりに ChangeFormOnItemUse または ChangeBetweenMultipleFormsOnItemUse を使用します。これらは種族を変更せずに、アクティブな DataByFormEntry インデックスを切り替えます。

カスタム進化タイプの作成(Source ティア)

Source ティアをお持ちの場合、新しい進化タイプを作成できます:

  1. EvolutionData を継承する新しいクラスを作成します:
[Serializable]
public class EvolveByStepCount : EvolutionData
{
[SerializeField] private int requiredSteps = 10000;

public override bool CheckEvolution(MonsterInstance monster, EvolutionContext context)
{
return context.TotalStepsWithMonster >= requiredSteps;
}
}
  1. Inspector のドロップダウンに表示されるよう、EvolutionManager に進化タイプを登録します。
  2. MonsterEntry の進化配列に追加し、パラメータを設定します。
シリアライゼーション

カスタム進化タイプは [Serializable] で、パラメータには [SerializeField] を使用する必要があります。MCE は進化配列に Unity のポリモーフィックシリアライゼーション([SerializeReference])を使用しているため、カスタムタイプも正しくシリアライズ・デシリアライズされます。

手動での進化トリガー

場合によっては、プログラムから進化チェックをトリガーしたいことがあります(例:CommandGraph ノードやカスタムスクリプトから):

// Source ティアのみ
EvolutionManager.TriggerEvolutionCheck(monsterInstance, EvolutionTrigger.LevelUp);

EvolutionManager はモンスターの種族にあるすべての適用可能な進化データエントリをチェックし、条件が満たされた最初のものをトリガーします。

ベストプラクティス

  1. 進化チェーンをエンドツーエンドでテストしてください。すべての可能な進化パスを確認しましょう。
  2. 循環する進化チェーンを避けてください。A が B に進化し、B が A に進化するとループが発生します。
  3. 適切なレベル閾値を設定してください。序盤のモンスターはレベル16-20前後、後半はレベル30-40前後で進化させましょう。
  4. 分岐進化は控えめに使用してください。ゲームプレイの深みが増しますが、分岐が多すぎるとプレイヤーが混乱します。
  5. アセットバリデーションで確認してくださいMCE > Tools > Asset Validation を実行して、すべての進化先種族がデータベースに存在することを確認しましょう。