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:
- El tipo de evolución (qué clase concreta usar).
- La especie objetivo (referencia a
MonsterEntry). - La forma objetivo (opcional, para evoluciones específicas de forma).
- Parámetros específicos del tipo (umbral de nivel, objeto requerido, etc.).
Tipos de evolución integrados
Basados en nivel
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveByLevel | Evoluciona en un nivel específico | RequiredLevel |
EvolveByLevelAtSpecificTime | Evoluciona en un nivel durante una hora del día | RequiredLevel, TimeOfDay |
EvolveByLevelWhenAttackIsHigherThanDefense | Evoluciona en un nivel cuando Ataque > Defensa | RequiredLevel |
EvolveByLevelWhenDefenseIsHigherThanAttack | Evoluciona en un nivel cuando Defensa > Ataque | RequiredLevel |
EvolveByLevelWhenAttackEqualsDefense | Evoluciona en un nivel cuando Ataque = Defensa | RequiredLevel |
EvolveByLevelWhenSpecificGender | Evoluciona en un nivel si es de un género específico | RequiredLevel, Gender |
EvolveByLevelWithSceneTag | Evoluciona en un nivel en una ubicación específica | RequiredLevel, SceneTag |
EvolveByLevelWithSceneTagAtSpecificTime | Nivel + ubicación + hora | RequiredLevel, SceneTag, TimeOfDay |
EvolveToRandomSpeciesByLevel | Evoluciona en una especie aleatoria de una lista en un nivel | RequiredLevel, PossibleTargets[] |
Basados en amistad
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveByFriendship | Evoluciona cuando la amistad alcanza el umbral | RequiredFriendship |
EvolveByFriendshipAtSpecificTime | Amistad + hora del día | RequiredFriendship, TimeOfDay |
EvolveByFriendshipWithMoveOfType | Amistad + conoce un movimiento de un tipo específico | RequiredFriendship, MoveType |
Basados en objetos
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveOnItemUse | Evoluciona cuando se usa un objeto específico sobre él | RequiredItem |
EvolveOnItemUseAtSpecificTime | Objeto + hora del día | RequiredItem, TimeOfDay |
EvolveOnItemUseOnSpecificGender | Objeto + género específico | RequiredItem, Gender |
EvolveOnItemUseWithSceneTag | Objeto + ubicación específica | RequiredItem, SceneTag |
EvolveOnLevelUpHoldingItem | Subir de nivel mientras porta un objeto | RequiredLevel, HeldItem |
EvolveOnLevelUpHoldingItemAtSpecificTime | Nivel + objeto portado + hora | RequiredLevel, HeldItem, TimeOfDay |
Basados en intercambio
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveWhenTraded | Evoluciona al ser intercambiado | (ninguno) |
EvolveWhenTradedHoldingItem | Evoluciona al ser intercambiado mientras porta un objeto | HeldItem |
EvolveWhenTradedWithMonster | Evoluciona al ser intercambiado por una especie específica | RequiredPartner |
Basados en movimientos
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveOnLevelUpWhenAMoveHasBeenLearnt | Subir de nivel si conoce un movimiento específico | RequiredMove |
EvolveOnLevelUpWhenAMoveHasBeenLearntWithSceneTag | Movimiento + ubicación | RequiredMove, SceneTag |
EvolveToRandomFormOnLevelUpWhenAMoveHasBeenLearnt | Nivel + movimiento, resultado de forma aleatoria | RequiredMove, PossibleForms[] |
EvolveByUsingMoveXTimes | Evoluciona después de usar un movimiento específico X veces en batalla | RequiredMove, TimesRequired |
Basados en condiciones
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveOnLevelUpWithOtherMonInParty | Subir de nivel con una especie específica en el equipo | RequiredPartyMember |
EvolveOnLevelUpWhenConditionHasLevel | Subir de nivel cuando una condición del juego ha alcanzado un nivel | Condition, ConditionLevel |
EvolveByEvolutionCounter | Evoluciona después de evolucionar X otros monstruos | RequiredCount |
Basados en condiciones de batalla
| Tipo | Descripción | Parámetros |
|---|---|---|
EvolveByCriticalHitCounter | Evoluciona después de asestar X golpes críticos en una sola batalla | CriticalHitsRequired |
EvolveByDefeatingRivals | Evoluciona después de derrotar X entrenadores rivales | RivalsRequired |
EvolveByRecoilDamageBasedOnGender | Evoluciona después de recibir daño por retroceso (específico por género) | Gender, RecoilThreshold |
Especiales
| Tipo | Descripción | Parámetros |
|---|---|---|
NincadaEvolution | Evolució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
- Tipo:
- Evolución 2:
- Tipo:
EvolveOnItemUse - Especie objetivo:
Infernarch (Forma Mega) - Objeto requerido:
Fire Stone
- Tipo:
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ón | Sí | No (misma instancia, nueva especie) | Flameleon evolucionando a Blazeking |
| Cambio de forma | Depende | No (misma instancia, misma especie) | Forma estacional, forma solo de batalla |
| Forma por objeto | Reversible | No | ChangeFormOnItemUse, 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:
- 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;
}
}
- Registre su tipo de evolución con el
EvolutionManagerpara que aparezca en el desplegable del Inspector. - Añádalo al array de evolución de un
MonsterEntryy configure los parámetros.
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
- Pruebe las cadenas de evolución de principio a fin. Recorra cada posible ruta de evolución.
- Evite cadenas de evolución circulares. A evolucionando a B y B evolucionando a A crea bucles infinitos.
- Establezca umbrales de nivel apropiados. Los monstruos tempranos deberían evolucionar alrededor del nivel 16-20, los posteriores alrededor de 30-40.
- Use evoluciones ramificadas con moderación. Añaden profundidad de juego pero pueden confundir a los jugadores si hay demasiadas ramificaciones.
- Valide con Asset Validation. Ejecute
MCE > Tools > Asset Validationpara asegurar que todas las especies objetivo de evolución existen en la base de datos.