跳到主要内容

进化系统

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

进化机制​

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

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

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

配置进化​

在 MonsterEntry ScriptableObject 上,Evolutions 数组包含一个或多个 EvolutionData 条目。每个条目指定:

  1. 进化类型(使用哪个具体类)。
  2. 目标物种(MonsterEntry 引用)。
  3. 目标形态(可选,用于特定形态的进化)。
  4. 类型特定参数(等级阈值、所需道具等)。

内置进化类型​

基于等级​

类型描述参数
EvolveByLevel在特定等级进化RequiredLevel
EvolveByLevelAtSpecificTime在特定等级且特定时间段进化RequiredLevel、TimeOfDay
EvolveByLevelWhenAttackIsHigherThanDefense在特定等级且攻击 > 防御时进化RequiredLevel
EvolveByLevelWhenDefenseIsHigherThanAttack在特定等级且防御 > 攻击时进化RequiredLevel
EvolveByLevelWhenAttackEqualsDefense在特定等级且攻击 = 防御时进化RequiredLevel
EvolveByLevelWhenSpecificGender在特定等级且特定性别时进化RequiredLevel、Gender
EvolveByLevelWithSceneTag在特定等级且特定地点进化RequiredLevel、SceneTag
EvolveByLevelWithSceneTagAtSpecificTime等级 + 地点 + 时间RequiredLevel、SceneTag、TimeOfDay
EvolveToRandomSpeciesByLevel在特定等级随机进化为列表中的一个物种RequiredLevel、PossibleTargets[]

基于亲密度​

类型描述参数
EvolveByFriendship亲密度达到阈值时进化RequiredFriendship
EvolveByFriendshipAtSpecificTime亲密度 + 时间段RequiredFriendship、TimeOfDay
EvolveByFriendshipWithMoveOfType亲密度 + 学会特定属性的招式RequiredFriendship、MoveType

基于道具​

类型描述参数
EvolveOnItemUse使用特定道具时进化RequiredItem
EvolveOnItemUseAtSpecificTime道具 + 时间段RequiredItem、TimeOfDay
EvolveOnItemUseOnSpecificGender道具 + 特定性别RequiredItem、Gender
EvolveOnItemUseWithSceneTag道具 + 特定地点RequiredItem、SceneTag
EvolveOnLevelUpHoldingItem携带道具时升级进化RequiredLevel、HeldItem
EvolveOnLevelUpHoldingItemAtSpecificTime等级 + 携带道具 + 时间RequiredLevel、HeldItem、TimeOfDay

基于交换​

类型描述参数
EvolveWhenTraded被交换时进化(无)
EvolveWhenTradedHoldingItem携带道具交换时进化HeldItem
EvolveWhenTradedWithMonster与特定物种交换时进化RequiredPartner

基于招式​

类型描述参数
EvolveOnLevelUpWhenAMoveHasBeenLearnt学会特定招式后升级时进化RequiredMove
EvolveOnLevelUpWhenAMoveHasBeenLearntWithSceneTag招式 + 地点RequiredMove、SceneTag
EvolveToRandomFormOnLevelUpWhenAMoveHasBeenLearnt等级 + 招式,随机形态结果RequiredMove、PossibleForms[]
EvolveByUsingMoveXTimes在战斗中使用特定招式 X 次后进化RequiredMove、TimesRequired

基于条件​

类型描述参数
EvolveOnLevelUpWithOtherMonInParty队伍中有特定物种时升级进化RequiredPartyMember
EvolveOnLevelUpWhenConditionHasLevel游戏条件达到某级别时升级进化Condition、ConditionLevel
EvolveByEvolutionCounter进化了 X 只其他怪兽后进化RequiredCount

基于战斗条件​

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

特殊​

类型描述参数
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
形态变化视情况而定否(同一实例,同一物种)季节形态、仅战斗形态
基于道具的形态可逆否ChangeFormOnItemUse、ChangeBetweenMultipleFormsOnItemUse

形态变化使用 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. 在 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 确保所有进化目标物种都存在于数据库中。