Saltar al contenido principal

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.

Cómo se resuelve un paso

La cuadrícula en juego

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 TileData del proyecto (ver Tipos de tile personalizados).
  • Hace seguimiento de los personajes y actores registrados en la cuadrícula.
  • Contiene el SceneInfo de 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 GridController antes 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:

TileTypeDescripción
NonExistentEl tile no tiene datos; se trata como vacío
WalkableSuelo normal
NonWalkableObstáculo sólido (paredes, árboles, rocas)
JumpableUna cornisa: se cruza saltando, en una dirección
BridgeSuperficie de puente, por encima de lo que hay debajo
BridgeEntranceTile de transición entre el suelo y el puente
WaterAgua que requiere nadar para cruzarla
WaterfallAgua vertical que se puede escalar
SlipperyHielo: el personaje se desliza hasta chocar con un obstáculo
WalkableNotBikableTransitable 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:

  1. Capa Ground: terreno base (caminos, hierba, tierra, bordes de agua).
  2. Capas de overlay: decoraciones sobre el suelo (flores, rocas, sombras) y lo que se dibuja sobre el jugador (copas de árboles).
  3. Tiles de encuentro: tiles cuyo prefab lleva un EncounterTile donde aparecen los monstruos salvajes.

Paso 3: Agregar el GridController​

  1. Selecciona el GameObject raíz del Grid.
  2. Agrega el componente GridController.
  3. El controlador recibe el asset TileData del proyecto mediante inyección de dependencias; asegúrate de que cada tile que pintaste esté registrado allí con el TileType correcto (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:

CampoDescripción
SceneLa escena que describe esta información
Localizable Name KeyNombre visible de la ubicación (se muestra en el encabezado)
Neighbours / Neighbour OffsetsLos mapas que conectan con este y dónde se sitúan, en tiles (cruces continuos)
Background MusicMúsica de este mapa
Is Affected By Sky, Default Weather, Allowed WeathersLuz 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 HereLo que el jugador puede hacer aquí
Is Dungeon, Is DarkUn mapa de dungeon usa encuentros Cave en cada tile
Region, TagsLa 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 ChancesEncuentros 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):

  1. Usa una capa de tilemap con un orden de ordenación más alto para el puente.
  2. Da a los tiles del puente el tipo Bridge y a los tiles donde se sube a él BridgeEntrance.
  3. 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:

  1. Da a los tiles de hielo el tipo Slippery.
  2. El MCECharacterController anula la entrada y continúa en la dirección del movimiento.
  3. 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:

  1. Da al tile el tipo Jumpable y agrega el comportamiento OneWayJumpableTile a su prefab.
  2. Establece su Jump Direction.
  3. Se reproduce una animación de salto cuando el personaje cruza la cornisa.

Cascadas​

Las cascadas se pueden escalar con la habilidad adecuada:

  1. Da a los tiles de la cascada el tipo Waterfall (el borde puede usar WaterfallEdge).
  2. 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:

  1. Coloca un TriggerActor en el tile de la puerta o entrada (un TriggerActor no bloquea el movimiento y ejecuta un grafo cuando el jugador entra).
  2. En su CommandGraph agrega un nodo TeleportPlayer con el destino como ubicación de escena (el SceneInfoAsset de destino y el tile). Con conexión, el servidor valida primero el teletransporte.
  3. 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:

EstadoMultiplicador del tiempo por tile
Caminando1
Corriendo (IsRunning)0,33
En bici (IsBiking)0,15
Nadando (IsSwimming)0,66
Saltandoel 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 MonsterFollowerController gestiona 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 campos WorldIdleSprite* y WorldWalkingSprite*).
  • 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.
Sprites de seguidor

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​

  1. Mantén coherentes los tipos de tile. Registra cada tile pintado en TileData y usa el mismo tipo para el mismo tipo de terreno.
  2. Prueba las conexiones de warp en ambos sentidos. Asegúrate de poder ir de A a B y de vuelta de B a A.
  3. Usa etiquetas de escena para la lógica. En lugar de codificar nombres de mapa, etiqueta los mapas como "Cave", "Water", "Forest", etc.
  4. Optimiza los mapas grandes. Los tilemaps muy grandes pueden afectar al rendimiento. Considera dividirlos en varias escenas conectadas con Neighbours.
  5. Prueba con mando. El movimiento en cuadrícula debe sentirse ágil tanto con teclado como con mando.