跳到主要内容

进化系统

MCE 通过多态命令模式支持 30+ 种进化类型。每种进化类型都是继承自 EvolutionData 的具体类,并定义了自己的触发条件。本指南涵盖所有内置进化类型及其配置方法。

进化机制

进化由 EvolutionManager 管理,它在关键时刻检查进化条件:

  • 升级后(在战斗中或通过稀有糖果)。
  • 对怪兽使用道具后
  • 交换完成后
  • 特定游戏事件(亲密度达到阈值、进入特定地点等)。

当条件满足时,EvolutionAnimation 播放,MonsterInstance 变为目标物种,保留其昵称、个体值、努力值、亲密度和其他个人数据。

配置进化

MonsterEntry ScriptableObject 上,Evolutions 数组包含一个或多个 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
EvolveByEvolutionCounter进化了 X 只其他怪兽后进化RequiredCount

基于战斗条件

类型描述参数
EvolveByCriticalHitCounter在一场战斗中命中 X 次要害后进化CriticalHitsRequired
EvolveByDefeatingRivals击败 X 个对手训练师后进化RivalsRequired
EvolveByRecoilDamageBasedOnGender受到反伤伤害后进化(性别相关)GenderRecoilThreshold

特殊

类型描述参数
NincadaEvolution特殊的双重进化(一只怪兽变为两只)SecondSpecies

设置进化链

以下是一个完整的三阶段进化链示例:

阶段 1:Flameleon(图鉴 #152)

Flameleon MonsterEntry 上,添加一个进化:

  • 类型:EvolveByLevel
  • 目标物种:Blazeking
  • 所需等级:16

阶段 2:Blazeking(图鉴 #153)

Blazeking MonsterEntry 上,添加两个进化(分支进化):

  • 进化 1:
    • 类型:EvolveByLevel
    • 目标物种:Infernarch
    • 所需等级:36
  • 进化 2:
    • 类型:EvolveOnItemUse
    • 目标物种:Infernarch (Mega Form)
    • 所需道具:Fire Stone

阶段 3:Infernarch(图鉴 #154)

无进化(最终阶段)。保持 Evolutions 数组为空。

形态变化 vs 进化

并非所有变形都是进化。MCE 区分以下几种:

机制永久?创建新实例?示例
进化否(同一实例,新物种)Flameleon 进化为 Blazeking
形态变化视情况而定否(同一实例,同一物种)季节形态、仅战斗形态
基于道具的形态可逆ChangeFormOnItemUseChangeBetweenMultipleFormsOnItemUse

形态变化使用 ChangeFormOnItemUseChangeBetweenMultipleFormsOnItemUse 而非进化数据。它们切换活动的 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. EvolutionManager 中注册你的进化类型,使其出现在 Inspector 下拉菜单中。
  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 确保所有进化目标物种都存在于数据库中。