Sistema de movimiento basado en cuadrícula
MCE usa un sistema de movimiento basado en tiles y cuadrícula construido sobre el Tilemap de Unity. El jugador y los NPC se mueven un tile cada vez sobre una cuadrícula discreta, y el sistema de cuadrícula gestiona la detección de colisiones, los efectos del terreno y las transiciones entre mapas.

El jugador está siempre en exactamente un tile. No hay medio paso ni posición dentro del tile, y eso es lo que hace que los encuentros, las colisiones y las transiciones entre mapas sean decidibles en lugar de aproximados.
Componentes principales
GridController
El GridController es el gestor por escena de la cuadrícula de tiles. Está en el mismo GameObject que el Grid de Unity (lo requiere) y:
- Encuentra los Tilemaps de la escena y responde consultas de tiles entre ellos, del orden de ordenación más alto al más bajo.
- Lee el tipo de movimiento de cada tile del asset
TileDatadel proyecto (ver Tipos de tile personalizados). - Hace seguimiento de los personajes y actores registrados en la cuadrícula.
- Contiene el
SceneInfode la escena (ver abajo). - Responde consultas de colisión: ¿puede un personaje moverse a este tile, desde este tile?
Cada escena de mapa tiene un GridController en la raíz de su cuadrícula.
MCECharacterController
El MCECharacterController gestiona el movimiento de cualquier personaje (jugador, NPC o un monstruo) en la cuadrícula:
- Movimiento ajustado a la cuadrícula: los personajes se mueven exactamente un tile por paso.
- Movimiento en 4 direcciones: arriba, abajo, izquierda, derecha. Sin movimiento diagonal.
- Renderizado de sprites: actualiza la dirección del sprite y la animación de caminar.
- Comprobación de colisiones: consulta al
GridControllerantes de cada movimiento. - Velocidad de movimiento:
Speed, en segundos por tile (0,25 por defecto).
PlayerCharacter
El PlayerCharacter agrega funciones específicas del jugador sobre el controlador:
- Gestión de entrada (teclado y mando).
- Disparadores de interacción (pulsar el botón de acción mirando a un NPC/objeto).
- Gestión de encuentros salvajes, pasos del repelente y el contador de pasos (
GlobalGameData.StepsTaken, que también impulsa los ciclos de huevo y la amistad). - Correr, ir en bici y nadar.
- Coordinación del monstruo seguidor y los atajos de emotes.
GlobalGridManager
El GlobalGridManager gestiona la navegación entre mapas:
- Mantiene la lista de cuadrículas cargadas y encuentra la cuadrícula que tiene un tile en una posición del mundo, para que un personaje pueda pasar de un mapa a su vecino.
- Carga de forma aditiva los vecinos del mapa actual, y los vecinos de esos vecinos (dos saltos de profundidad), de modo que cruzar un mapa intermedio no descarga aquel del que vienes.
- Cede el jugador cuando un personaje cruza de una cuadrícula a otra.
Tipos de tile
Cada asset de tile tiene un tipo de movimiento (TileType), asignado en el asset TileData:
| TileType | Descripción |
|---|---|
NonExistent | El tile no tiene datos; se trata como vacío |
Walkable | Suelo normal |
NonWalkable | Obstáculo sólido (paredes, árboles, rocas) |
Jumpable | Una cornisa: se cruza saltando, en una dirección |
Bridge | Superficie de puente, por encima de lo que hay debajo |
BridgeEntrance | Tile de transición entre el suelo y el puente |
Water | Agua que requiere nadar para cruzarla |
Waterfall | Agua vertical que se puede escalar |
Slippery | Hielo: el personaje se desliza hasta chocar con un obstáculo |
WalkableNotBikable | Transitable a pie pero no en bicicleta |
Además del tipo, los comportamientos de tile (componentes en el prefab del tile) añaden lógica: EncounterTile marca una zona de encuentros salvajes, OneWayJumpableTile fija la dirección de una cornisa, ForceCharacterToKeepMoving crea cintas transportadoras y corrientes, TallGrass, LadderUp, WaterfallEdge, WhirlwindInDirection y más. Todos se describen en Tipos de tile personalizados.
Configurar un mapa
Paso 1: Crear la estructura del Tilemap
Los mapas de MCE usan una jerarquía estándar de Tilemap de Unity:
Grid (Grid + GridController)
└── Ground (Tilemap, TilemapRenderer, sorting order 0)
└── GroundOverlay (Tilemap, TilemapRenderer, sorting order 1)
└── Above ... (more Tilemaps as needed)
└── Actors (NPC GameObjects)
No hay un tilemap de colisión aparte que pintar: lo que bloquea el movimiento es el TileType de los tiles que pintas.
Paso 2: Pintar el mapa
Usa el overlay del Editor de mapas, o la Tile Palette de Unity (Window > 2D > Tile Palette), para pintar tu mapa:
- Capa Ground: terreno base (caminos, hierba, tierra, bordes de agua).
- Capas de overlay: decoraciones sobre el suelo (flores, rocas, sombras) y lo que se dibuja sobre el jugador (copas de árboles).
- Tiles de encuentro: tiles cuyo prefab lleva un
EncounterTiledonde aparecen los monstruos salvajes.
Paso 3: Agregar el GridController
- Selecciona el GameObject raíz del Grid.
- Agrega el componente
GridController. - El controlador recibe el asset
TileDatadel proyecto mediante inyección de dependencias; asegúrate de que cada tile que pintaste esté registrado allí con elTileTypecorrecto (los botones Populate y CheckInvalid del asset ayudan). Un tile que no está registrado se trata como transitable y registra una advertencia.
Paso 4: Configurar SceneInfo
Cada escena de mapa necesita un componente SceneInfo que apunte a un SceneInfoAsset (créalo con New Scene Info en la pestaña Database del Hub). Asigna el componente al campo Scene Info del GridController. El asset contiene:
| Campo | Descripción |
|---|---|
| Scene | La escena que describe esta información |
| Localizable Name Key | Nombre visible de la ubicación (se muestra en el encabezado) |
| Neighbours / Neighbour Offsets | Los mapas que conectan con este y dónde se sitúan, en tiles (cruces continuos) |
| Background Music | Música de este mapa |
| Is Affected By Sky, Default Weather, Allowed Weathers | Luz de día/noche y clima |
| Can Open Storage Here, Can Fly From Here, Can Teleport From Here, Can Escape Rope From Here, Can Fish Here | Lo que el jugador puede hacer aquí |
| Is Dungeon, Is Dark | Un mapa de dungeon usa encuentros Cave en cada tile |
| Region, Tags | La región y las etiquetas de escena que usa la lógica del juego (por ejemplo "Cave", "Town", "Route") |
| Encounters, Battle Scenarios Per Encounter, Own Encounter Chances | Encuentros salvajes del mapa: ver Encuentros salvajes |
Terreno especial
Puentes
Los puentes permiten que un personaje camine sobre tiles que de otro modo serían infranqueables (como el agua):
- Usa una capa de tilemap con un orden de ordenación más alto para el puente.
- Da a los tiles del puente el tipo
Bridgey a los tiles donde se sube a élBridgeEntrance. - El personaje camina por la capa del puente cuando se sube a él.
La lógica del puente gestiona el orden en Z: el personaje se renderiza por encima del agua pero por debajo de las barandillas del puente (OverBridgeBodySortOrder).
Tiles resbaladizos (hielo)
En los tiles de hielo, el personaje se desliza en la dirección en la que se mueve hasta chocar con una pared o con un tile que no sea de hielo:
- Da a los tiles de hielo el tipo
Slippery. - El
MCECharacterControlleranula la entrada y continúa en la dirección del movimiento. - Agrega paredes u obstáculos para crear diseños de puzles de hielo.
Cornisas
Las cornisas son tiles de un solo sentido: el personaje puede saltar hacia abajo pero no volver a subir:
- Da al tile el tipo
Jumpabley agrega el comportamientoOneWayJumpableTilea su prefab. - Establece su Jump Direction.
- Se reproduce una animación de salto cuando el personaje cruza la cornisa.
Cascadas
Las cascadas se pueden escalar con la habilidad adecuada:
- Da a los tiles de la cascada el tipo
Waterfall(el borde puede usarWaterfallEdge). - Cuando el jugador mira a la cascada y usa la habilidad de escalada, el personaje asciende.
Transiciones entre mapas
Conexiones continuas
Para mapas que conectan directamente (la Ruta 1 continúa en la Ruta 2 por el borde norte), lista cada mapa en los Neighbours del otro con los Neighbour Offsets en tiles que lo sitúan. El GlobalGridManager carga los vecinos de forma aditiva y el personaje simplemente pasa de una cuadrícula a la otra: cuando la cuadrícula actual no tiene tile en la posición de destino, el gestor busca una cuadrícula cargada que sí lo tenga. Un tile de un vecino que sea una pared (NonWalkable) o vacío (NonExistent) sigue bloqueando el paso.
Warps (puertas, cuevas, teletransportes)
Para mover al jugador a otro lugar:
- Coloca un
TriggerActoren el tile de la puerta o entrada (unTriggerActorno bloquea el movimiento y ejecuta un grafo cuando el jugador entra). - En su CommandGraph agrega un nodo TeleportPlayer con el destino como ubicación de escena (el
SceneInfoAssetde destino y el tile). Con conexión, el servidor valida primero el teletransporte. - Opcionalmente, agrega OpenDoor, FadeScreenToBlack y sonidos a su alrededor para vestir la transición.
Los mapas importados reciben sus warps colocados por la integración de escenas del importador.
Configuración del movimiento del jugador
La velocidad de movimiento es el campo Speed del personaje, en segundos por tile (0,25 por defecto, es decir, cuatro tiles por segundo). El estado del personaje escala el tiempo por tile:
| Estado | Multiplicador del tiempo por tile |
|---|---|
| Caminando | 1 |
Corriendo (IsRunning) | 0,33 |
En bici (IsBiking) | 0,15 |
Nadando (IsSwimming) | 0,66 |
| Saltando | el salto se reproduce a 1,5x del tiempo del paso |
El contador de pasos (GlobalGameData.StepsTaken) avanza con cada paso e impulsa los ciclos de huevo y los ticks de amistad.
Monstruos seguidores
MCE soporta un sistema de seguidores en el que el primer monstruo del equipo del jugador camina detrás de él en el mundo:
- El
MonsterFollowerControllergestiona la posición y el sprite del seguidor. - El seguidor se mantiene un tile detrás del jugador y lo alcanza tras las escenas.
- Los sprites de seguidor se configuran por especie y forma en el
MonsterEntry(los camposWorldIdleSprite*yWorldWalkingSprite*). - El jugador puede interactuar con el seguidor (mirarlo y pulsar el botón de acción) para ver una reacción; un juego importado puede traer su propia tabla de diálogo, y el seguidor puede mostrar globos de emoción.
Si una especie de monstruo no tiene asignado un sprite de seguidor para el mundo, el seguidor no aparecerá. Crea las hojas de sprites de seguidores como hojas de ciclo de caminar de 4 direcciones.
Buenas prácticas
- Mantén coherentes los tipos de tile. Registra cada tile pintado en
TileDatay usa el mismo tipo para el mismo tipo de terreno. - Prueba las conexiones de warp en ambos sentidos. Asegúrate de poder ir de A a B y de vuelta de B a A.
- Usa etiquetas de escena para la lógica. En lugar de codificar nombres de mapa, etiqueta los mapas como "Cave", "Water", "Forest", etc.
- Optimiza los mapas grandes. Los tilemaps muy grandes pueden afectar al rendimiento. Considera dividirlos en varias escenas conectadas con Neighbours.
- Prueba con mando. El movimiento en cuadrícula debe sentirse ágil tanto con teclado como con mando.