Mapa de escenario con seguimiento en Unity

Ya que se tiene la navegación de personaje y algunos items para interactuar se puede añadir una segunda cámara que funcione como “mapa” o “vista aérea” del área donde se encuentra el personaje.

El primer paso es crear una nueva cámara y desactivar su audio listener para que no choque con la cámara principal. Seguido de esto, hacemos que su proyección sea Orthograpic para que no se vea en perspectiva y la colocamos arriba del personaje apuntando hacia él:

Para tener una mejor visualización vamos a “recortar” el área de visibilidad de la cámara de modo que sólo quede en un pequeño cuadro a la esquina del juego. Para lograr esto usaremos las opciones de la cámara en Viewport Rect. Nos vamos a la ventana de Game y lo que se verá será la cámara ocupando todo el espacio, modificamos X,Y y W,H para posicionar el recuadro en la esquina:

Ahora con esa visualización será más fácil asignar las distancias de render de cámara. Para alejar el mapa y ver más área modificaremos el campo Size:

Lo único que resta es lograr que la cámara siga al personaje. Para esto el método más rápido es hacer que la cámara sea un CHILD del personaje:

Provocando que cuando corra el juego la cámara se moverá junto al personaje siempre marcándolo al centro:

En muchas ocasiones es mejor mostrar marcadores en vez del render directo del mapa, por ejemplo, como se ve en el primer gif de este texto, el mapa está en blanco y negro y existe un circulo al centro para mostrar al personaje:

Lo primero es el marcador del personaje. Se crea un plano CHILD del personaje al que se le agrega una textura de SPRITE para que funcione con transparencia. El círculo a utiliza es el siguiente PNG con las características mostradas:

Para crear el material que utilizará el plano: Project > Create > Material > Inspector > Asignar imagen Sprite en Albedo > Shader > Sprite > Default:

Después se añade el plano child al personaje con la cara viendo hacia arriba (hacia la cámara del mapa) y se le asigna el material de sprite:

Para evitar que el plano se vea en la cámara de juego y únicamente sea visible en el mapa se crearán capas (Layers). Todos los GameObject tiene la opción de ser asignados a un Layer en su zona de Inspector, y cada cámara tiene un selector de Layers para renderear. A continuación se creará un layer para objetos que sólo deban ser visibles para la cámara de mapa:

Ahora lo siguiente es decirle a la cámara que renderea el juego (la cámara principal) que ignore el Layer “soloEnMAPA”:

El círculo ya no se ve en la MainCamera, únicamente es visible en la Camera_mapa

El proceso anterior puede ser realizado con múltiples objetos y al revés (que sólo se vea en el juego y no en el mapa). En el GIF inicial se tomó una foto superior a todo el terreno, se editó y se colocó en un plano inferior al terreno general:

Después se creó una capa que oculta al plano con la textura de la cámara de juego y otra capa para ocultar al terreno de la cámara de mapa.

También se añadieron esferas sólo visibles a la cámara de mapa.