Archivo por meses: enero 2014

Texto borroso en Unity 3D con Text Mesh

En Unity 3D, al insertar un texto mediante Text Mesh puede darse el caso de que este aparezca borroso como muestro en la imagen del post. La solución es fácil. Solo hay que seleccionar su escala, tanto X, Y y Z, y dejarla en 0.1. De este modo ya podemos dar un tamaño en Font Size correcto.

Ordenar Sprites en Unity con sortingOrder y su posición Y

Después de muchas pruebas la mejor manera que he encontrado para ordernar los diferentes sprites que puedes encontrar en un nivel es a través de su posición Y. Así lo que hacemos es convertir esta posición en el orden. De este modo los objetos de arriba aparecerán detrás de los objetos situados más abajo.

Eliminar escenas de nuestro proyecto Unity 3D en “Scenes in build”

En Scenes in Build, eliminar las escenas que nos sobran a la hora de compilar el juego o aplicación es fácil. Aunque no aparece ningún botón de eliminar ni ningún menú pulsando el ratón solo hay que seleccionar la escena que se desee eliminar y pulsar la tecla delete.

Bloquear y desbloquear Sprites en Unity 2D

sprite_bloqueadoComo si de Photoshop se tratara se pueden bloquear sprites a través de su componente SpriteRenderer. Esto es muy útil a la hora de bloquear elementos. Principalmente backgrounds que suelen ser seleccionados y movidos por error. Para evitar todo esto solo hay que abrir o cerrar el componente para que este quede bloqueado y no lo podamos mover en la ventana del editor.

EfectoTrail Renderer

unity_trail_rendererEl Efecto Trail Renderer dibuja una cola que simula efecto de velocidad, de fuego, etc. sobre un gameobject. Es muy fácil de aplicar en Unity 3D. Simplemente selecciona el sprite u objeto sobre el que quieras aplicar y seleccionas añadir componente. En efectos encontrarás Trail Renderer. Ahora solo tienes que aplicar un material para inicio y otro para final y listo. Puedes crear un material rápidamente desde la pestaña Project > Create > Material y añadiendo cualquier imagen como Base.

Sigue leyendo

Campo de visión tipo cono para el IA del enemigo

En algunos juegos como Commandos es necesario calcular el área de visión del enemigo. Ésta tiene un ángulo limitado de X grados hacia su punto de visión y forma de cono, lo que nos deja un espacio dentro de su área de visión donde no nos puede ver.

La teoría parece más fácil que la práctica y en un primer momento puedes pensar en crear un Collider pero no creo que sea la solución correcta. En Unity 2D no es complicado programarlo. Se puede resumir en que necesitamos la línea de vista frontal del enemigo y su distancia. Después, para calcular el ángulo entre el player y el enemy, necesitamos conocer una segunda línea entre estos dos. Con estas dos líneas podemos calcular el ángulo entre ellas y si entra dentro de nuestro ángulo mínimo calculamos la distancia hasta el enemigo. Finalmente, si todo está correcto, tenemos lo que buscábamos.

Sigue leyendo

Cambiar punto de pivote en un sprite múltiple

El cambio de pivote en un sprite múltiple es muy parecido al cambio de pivote en un sprite simple. Solo hay que abrir el “Sprite Editor” con nuestro sprite múltiple, seleccionar el sprite en el que queramos cambiar el pivote y, bien podremos hacerlo arrastrando el pivote con el puntero del ratón o mediante el cambio de los valores X e Y del panel del sprite.

Cambiar punto de pivote de un sprite

pivos_sprite_unityUna de las cosas que me ha vuelto loco hasta ahora es el pivote de un sprite. Vengo de Adobe Flash y sé que los movieclips (o prefabs que son los equivalentes en Unity) tienen pivote y todo gira en torno a él. Hasta ahora he tenido que crear un gameobject vacío y colocar el elemento que necesitaba acorde a su nueva posición local… un rollo.
Bien, este punto tan importante se puede cambiar desde el sprite mismo. Seleccionando el punto de pivote entre los expuestos o creando nuestro propio punto. Hay que saber que los valores X e Y oscilan entre 0 y 1. Siendo 0 el punto inferior izquierdo y 1 el superior derecho.

Prototipo Shooter 2D

Prototipo con Unity 2D de un juego mezcla Shooter 2D y plataformas.

Lo más destacado en este prototipo es:

  • Uso de RaycastHit2D para los disparos.
  • Uso de precisión aleatoria en los disparos.
  • Uso de Linerenderer entre dos puntos.
  • Función de recarga del arma.
  • Uso de variables tipo LayerMask.
  • Desactivación y cambio de cursor
  • Movimiento de plataformas entre dos puntos tipo transform

La idea es ver cómo actúa tanto raycast como linecast. En este ejemplo lo he utilizado para simular un disparo de arma y para comprobar que los enemigos tienen visión directa con el player principal, pero la gente lo suele utiliza también para saber si el personaje está en el suelo, está chocando con algún elemento, etc.

La precisión aleatoria es un elemento que da dificultad y un poco de realismo al juego. Muy fácil de implementar con un Random.Range(-precision,precision) que devuelve un valor comprendido entre la precisión del player.

El uso de linerender se hace necesario para verificar la dirección del disparo y con qué elemento colisiona.

La función de recarga del arma es un añadido que da también realismo al juego y un toque más de dificultad al tener que economizar las balas para no llegar cara el enemigo sin ellas.

El uso de variables tipo Layermask permite seleccionar las capas en las que quieres que actúe raycast. Muy útil para selecionar las capas donde se encuentran los enemigos, las paredes, el suelo, el player,… y dejar fuera las que no se necesiten.

Sigue leyendo

Mathf.Clamp ajustando un valor dentro de dos parámetros

Mathf.Clamp es una pequeña función que nos ayuda a ajustar un valor entre dos valores dados. Por ejemplo para ajustar la vida de un personaje entre 0 y 100.