Archivo de la categoría: Colisiones y triggers

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

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

Algunas cosas que he aprendido en Unity 2D

No soy programador, al contrario, soy diseñador gráfico e ilustrador pero siempre se me ha dado bien la programación. Por eso os invito a opinar y mejorar mi código. A lo que vamos…

He estado dándole un poco a Unity 2D con unos sprites y animaciones que diseñé hace algún tiempo y que quería recuperar. Sí, el mago, el dragón y el fondo que aparecen en casi todos los últimos ejercicios.

Voy a dejar todo el código que he ido elaborando e intentaré explicar los puntos que creo se podrían mejorar o los más importantes.

Lo primero que recomiento es actualizar o descargar Unity 4.5 (si no lo has hecho ya) porque las versiones anteriores siempre tienen bugs que se van reparando con las últimas versiones.

Sigue leyendo

Disparos, prefabs y detectores de colisiones

prefab_bullet
En el siguiente ejemplo vamos a hacer que nuestro mago dispare. Vamos a utilizar prefabs, clones de este prefab y detectores de colisiones.

Para que nuestro personaje dispare necesitamos un sprite al que llamaremos bullet. Con este sprite creamos un prefab que llamaremos bullet y que podemos poner en la carpeta de prefabs. Un prefab es un conjunto de componentes, sonidos, scripts, etc. que podemos clonar y donde al modificar el prefab se modifican todos los clones. El prefab contendrá el sprite de la imágen, el componente Rigid Body 2D con la gravedad a 0 y el Circle Collider 2D. También se le puede añadir sonido, partículas, etc.

El script asociado a bullet será el siguiente:

Sigue leyendo

OnTriggerEnter2D en unity

Para que OnTriggerEnter2D funcione correctamente en Unity hay que añadir el componente Box Collider 2D y checkear is Trigger. Añadir el componente Rigid Body 2D, poner el valor Gravity Scale a 0 (Comprobar que Is Kinematic está desactivado) y por último añadir el siguiente script.