Saltar al contenido principal

Sistema de evolución

MCE soporta más de 30 tipos de evolución a través de un patrón de comandos polimórfico. Cada tipo de evolución es una clase concreta que hereda de EvolutionData y define sus propias condiciones de activación. Esta guía cubre todos los tipos de evolución integrados y cómo configurarlos.

Cómo funciona la evolución

La evolución es gestionada por el EvolutionManager, que verifica las condiciones de evolución en momentos clave:

  • Después de subir de nivel (en batalla o mediante caramelo raro).
  • Después de usar un objeto sobre un monstruo.
  • Después de completar un intercambio.
  • En eventos específicos del juego (umbral de amistad alcanzado, ubicación visitada, etc.).

Cuando se cumplen las condiciones, se reproduce la EvolutionAnimation y el MonsterInstance se transforma en la especie objetivo, conservando su apodo, IVs, EVs, amistad y otros datos personales.

Configurar la evolución

En un ScriptableObject MonsterEntry, el array Evolutions contiene una o más entradas EvolutionData. Cada entrada especifica:

  1. El tipo de evolución (qué clase concreta usar).
  2. La especie objetivo (referencia a MonsterEntry).
  3. La forma objetivo (opcional, para evoluciones específicas de forma).
  4. Parámetros específicos del tipo (umbral de nivel, objeto requerido, etc.).

Tipos de evolución integrados

Basados en nivel

TipoDescripciónParámetros
EvolveByLevelEvoluciona en un nivel específicoRequiredLevel
EvolveByLevelAtSpecificTimeEvoluciona en un nivel durante una hora del díaRequiredLevel, TimeOfDay
EvolveByLevelWhenAttackIsHigherThanDefenseEvoluciona en un nivel cuando Ataque > DefensaRequiredLevel
EvolveByLevelWhenDefenseIsHigherThanAttackEvoluciona en un nivel cuando Defensa > AtaqueRequiredLevel
EvolveByLevelWhenAttackEqualsDefenseEvoluciona en un nivel cuando Ataque = DefensaRequiredLevel
EvolveByLevelWhenSpecificGenderEvoluciona en un nivel si es de un género específicoRequiredLevel, Gender
EvolveByLevelWithSceneTagEvoluciona en un nivel en una ubicación específicaRequiredLevel, SceneTag
EvolveByLevelWithSceneTagAtSpecificTimeNivel + ubicación + horaRequiredLevel, SceneTag, TimeOfDay
EvolveToRandomSpeciesByLevelEvoluciona en una especie aleatoria de una lista en un nivelRequiredLevel, PossibleTargets[]

Basados en amistad

TipoDescripciónParámetros
EvolveByFriendshipEvoluciona cuando la amistad alcanza el umbralRequiredFriendship
EvolveByFriendshipAtSpecificTimeAmistad + hora del díaRequiredFriendship, TimeOfDay
EvolveByFriendshipWithMoveOfTypeAmistad + conoce un movimiento de un tipo específicoRequiredFriendship, MoveType

Basados en objetos

TipoDescripciónParámetros
EvolveOnItemUseEvoluciona cuando se usa un objeto específico sobre élRequiredItem
EvolveOnItemUseAtSpecificTimeObjeto + hora del díaRequiredItem, TimeOfDay
EvolveOnItemUseOnSpecificGenderObjeto + género específicoRequiredItem, Gender
EvolveOnItemUseWithSceneTagObjeto + ubicación específicaRequiredItem, SceneTag
EvolveOnLevelUpHoldingItemSubir de nivel mientras porta un objetoRequiredLevel, HeldItem
EvolveOnLevelUpHoldingItemAtSpecificTimeNivel + objeto portado + horaRequiredLevel, HeldItem, TimeOfDay

Basados en intercambio

TipoDescripciónParámetros
EvolveWhenTradedEvoluciona al ser intercambiado(ninguno)
EvolveWhenTradedHoldingItemEvoluciona al ser intercambiado mientras porta un objetoHeldItem
EvolveWhenTradedWithMonsterEvoluciona al ser intercambiado por una especie específicaRequiredPartner

Basados en movimientos

TipoDescripciónParámetros
EvolveOnLevelUpWhenAMoveHasBeenLearntSubir de nivel si conoce un movimiento específicoRequiredMove
EvolveOnLevelUpWhenAMoveHasBeenLearntWithSceneTagMovimiento + ubicaciónRequiredMove, SceneTag
EvolveToRandomFormOnLevelUpWhenAMoveHasBeenLearntNivel + movimiento, resultado de forma aleatoriaRequiredMove, PossibleForms[]
EvolveByUsingMoveXTimesEvoluciona después de usar un movimiento específico X veces en batallaRequiredMove, TimesRequired

Basados en condiciones

TipoDescripciónParámetros
EvolveOnLevelUpWithOtherMonInPartySubir de nivel con una especie específica en el equipoRequiredPartyMember
EvolveOnLevelUpWhenConditionHasLevelSubir de nivel cuando una condición del juego ha alcanzado un nivelCondition, ConditionLevel
EvolveByEvolutionCounterEvoluciona después de evolucionar X otros monstruosRequiredCount

Basados en condiciones de batalla

TipoDescripciónParámetros
EvolveByCriticalHitCounterEvoluciona después de asestar X golpes críticos en una sola batallaCriticalHitsRequired
EvolveByDefeatingRivalsEvoluciona después de derrotar X entrenadores rivalesRivalsRequired
EvolveByRecoilDamageBasedOnGenderEvoluciona después de recibir daño por retroceso (específico por género)Gender, RecoilThreshold

Especiales

TipoDescripciónParámetros
NincadaEvolutionEvolución dual especial (crea dos monstruos a partir de uno)SecondSpecies

Configurar una cadena de evolución

Aquí hay un ejemplo completo de una cadena de evolución de tres etapas:

Etapa 1: Flameleon (Dex #152)

En el MonsterEntry de Flameleon, añada una evolución:

  • Tipo: EvolveByLevel
  • Especie objetivo: Blazeking
  • Nivel requerido: 16

Etapa 2: Blazeking (Dex #153)

En el MonsterEntry de Blazeking, añada dos evoluciones (ramificación):

  • Evolución 1:
    • Tipo: EvolveByLevel
    • Especie objetivo: Infernarch
    • Nivel requerido: 36
  • Evolución 2:
    • Tipo: EvolveOnItemUse
    • Especie objetivo: Infernarch (Forma Mega)
    • Objeto requerido: Fire Stone

Etapa 3: Infernarch (Dex #154)

Sin evoluciones (etapa final). Deje el array de Evoluciones vacío.

Cambios de forma vs evolución

No todas las transformaciones son evoluciones. MCE distingue entre:

Mecanismo¿Permanente?¿Crea nueva instancia?Ejemplo
EvoluciónNo (misma instancia, nueva especie)Flameleon evolucionando a Blazeking
Cambio de formaDependeNo (misma instancia, misma especie)Forma estacional, forma solo de batalla
Forma por objetoReversibleNoChangeFormOnItemUse, ChangeBetweenMultipleFormsOnItemUse

Los cambios de forma usan ChangeFormOnItemUse o ChangeBetweenMultipleFormsOnItemUse en lugar de datos de evolución. Estos alternan el índice activo de DataByFormEntry sin cambiar la especie.

Crear tipos de evolución personalizados (nivel Source)

Si tiene el nivel Source, puede crear nuevos tipos de evolución:

  1. Cree una nueva clase que herede de EvolutionData:
[Serializable]
public class EvolveByStepCount : EvolutionData
{
[SerializeField] private int requiredSteps = 10000;

public override bool CheckEvolution(MonsterInstance monster, EvolutionContext context)
{
return context.TotalStepsWithMonster >= requiredSteps;
}
}
  1. Registre su tipo de evolución con el EvolutionManager para que aparezca en el desplegable del Inspector.
  2. Añádalo al array de evolución de un MonsterEntry y configure los parámetros.
Serialización

Los tipos de evolución personalizados deben ser [Serializable] y usar [SerializeField] para sus parámetros. MCE utiliza la serialización polimórfica de Unity ([SerializeReference]) para el array de evolución, por lo que sus tipos personalizados se serializarán y deserializarán correctamente.

Activar la evolución manualmente

En algunos casos, puede querer activar una verificación de evolución programáticamente (por ejemplo, desde un nodo de CommandGraph o un script personalizado):

// Source tier only
EvolutionManager.TriggerEvolutionCheck(monsterInstance, EvolutionTrigger.LevelUp);

El EvolutionManager verificará todas las entradas de datos de evolución aplicables en la especie del monstruo y activará la primera cuyas condiciones se cumplan.

Mejores prácticas

  1. Pruebe las cadenas de evolución de principio a fin. Recorra cada posible ruta de evolución.
  2. Evite cadenas de evolución circulares. A evolucionando a B y B evolucionando a A crea bucles infinitos.
  3. Establezca umbrales de nivel apropiados. Los monstruos tempranos deberían evolucionar alrededor del nivel 16-20, los posteriores alrededor de 30-40.
  4. Use evoluciones ramificadas con moderación. Añaden profundidad de juego pero pueden confundir a los jugadores si hay demasiadas ramificaciones.
  5. Valide con Asset Validation. Ejecute MCE > Tools > Asset Validation para asegurar que todas las especies objetivo de evolución existen en la base de datos.