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ónSíNo (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.