Cuando estamos a la mitad del desarrollo de uno de nuestros videojuegos, a veces nos percatamos que necesitamos un minimapa, ya sea para dar contexto ampliado del mundo de nuestro juego, o para mostrar información extra.
Mientras estamos empezando en Unity probablemente no sepamos como lograr implementar este efecto en nuestro juego, por eso en este tutorial vamos a aprender a agregarlo a nuestro juego, sea 2D o 3D.
Primero que nada vamos a ir a la jerarquía del proyecto y allí vamos a crear un objeto tipo RawImage en la sección UI:
Vamos a hacer un paréntesis para explicar por que usamos una RawImage en vez de la tradicional Image, la diferencia es que la Imagen acepta como parámetro un Sprite, que termina siendo precisamente una imagen suelta, pero nosotros queremos que la imagen se actualice en vivo, si vemos en el componente raw image, nos acepta como parámetro un objeto tipo Textura, y aquí es donde ocurre la magia.
Existe un asset en Unity que se llama Render Texture, esta textura permite ser actualizada en tiempo real y leída por nuestro objeto raw image, ahora que tenemos nuesta Raw Image posicionada en nuestro canvas se vera mas o menos así:
Ahora nuestra Raw Image esta mostrando una imagen blanca por defecto, por eso necesitamos crear nuestro RenderTexture y arrastrarlo al inspector para enlazarlos, para ello hacemos click derecho en nuestra sección de proyecto > create > render texture:
Ahora renombramos nuestra textura con un nombre descriptivo, y la enlazamos en el inspector del RawImage:
En este punto ahora nos preguntamos, quien actualiza esta textura en tiempo real?, pues una camara, el minimapa, es en efecto una segunda camara, que ve de arriba a abajo sin perspectiva a nuestro personaje, entonces vamos a crear una nueva camara en nuestra jerarquia, para ello hacemos click derecho en la jerarquía > camera, esta nueva cámara se vera mas o menos asi:
De aquí vamos a cambiar varias cosas, primero que nada necesitamos que la posición X y Y sean idénticas a nuestro personaje, en caso que el proyecto sea 3D, debemos modificar la rotación en X para que mire hacia abajo, en el caso de 2D debemos disminuir la posición en Z de modo que la cámara quede viendo desde “Arriba a nuestro personaje”, luego debemos cambiar la proyección de la cámara de perspectiva a ortográfica, con el parámetro Size que tenemos ahora por defecto en valor 5, podemos modificar el Zoom de nuestro minimapa, eliminamos el componente AudioListener de nuestra cámara y nuestra cámara que esta casi lista debería quedar mas o menos así:
Los mas observadores ya habrán visto el parámetro target texture, en efecto aquí es donde vamos a enlazar la render texture que creamos antes, de modo que exista un puente de conexión entre la raw image que esta en nuestro canvas, y la cámara que ve a nuestro personaje desde arriba.
Ya enlazada la textura en este parámetro, podemos correr el proyecto ver como nuestro minimapa se renderiza correctamente, ahora tenemos una sola cosa por hacer, hacer la cámara del minimapa, hija de nuestro personaje, de este modo, si tienen la misma posición en X y Y antes de empezar el juego, la cámara cambiara su posición cuando el personaje que es padre se mueva.
Felicitaciones, has logrado agregar un minimapa a tu juego, ahora puedes usar una Mask para tener un minimapa circular, agregar una imagen detrás para que tenga un borde, agregar múltiples elementos para cambiar los tipos de mapa, en fin tu imaginación es el limite, si te funciono, comparte en los comentarios como quedo tu minimapa para que todos podamos ver el asombroso trabajo que hiciste.
Interesante, gracias por compartirlo.