Skip to content

Creación de videojuego en Unity 3D (II): scripts

Conociendo Unity3D (VII)
1. Creación de escenas y niveles en videojuego Unity 3D
2. Colliders: detección de colisiones en videojuego Unity 3D
3. Componentes para creación de interfaz de usuario en Unity 3D
4. GUI Texture y GUI Text: ejemplo implementación en videojuego
5. Creación de videojuego en Unity 3D (I): estructura y elementos
6. Creación de videojuego en Unity 3D (II): scripts
7. Creación de videojuego en Unity 3D (III): video
8. Generar ejecutable de videojuego Unity: ejemplo plataforma Android

Vamos a completar el desarrollo del videojuego FPS en Unity 3D, que comenzamos explicando en el tutorial anterior, describiendo el código fuente de los scripts que vamos a utilizar.

Estos scripts nos permiten establecer la lógica de funcionamiento asociada tanto a las colisiones que se producen en el videojuego, como al modelo de puntuación utilizado, además de controlar el daño que recibe el personaje, mostrando de manera gráfica la vida restante a través de una barra de vida.

Scripts: si no estás familiarizado con los programas que puedes crear para tus juegos, consulta nuestros anteriores tutoriales sobre scripts en Unity 3D.

Los scripts desarrollados para este videojuego han sido programados en lenguaje C# por ser el lenguaje de referencia en Unity, tal como comentamos en esas publicaciones, aparte de la similitud de su sintaxis al lenguaje Java, y por extensión a Android.

En la siguiente publicación de esta serie podrás descargar el proyecto de este videojuego y su APK para Android. También veremos explicado todo este proyecto en un video.

Colisión enemigo con jugador (decremento de la variable energiaPersonaje)

Vemos el diagrama UML de las dos clases AtaqueEnemigo y BarraVidaPersonaje con sus variables (campos) y métodos:

Diagrama UML ataque enemigo barra vida personaje

AtaqueEnemigo.cs

Script encargado de controlar las colisiones que se produzcan entre el objeto Jugador, y el objeto golem, y en caso de que se produzca dicha colisión, se invocará al método SendMessage , pasándole como argumento un string con el nombre del método a ejecutar:

Nota: Es necesario recordar que toda variable que se declare con el modificador de acceso «public», podrá ser inicializada desde el editor de Unity, para un mayor control de la configuración del juego.

BarraVidaPersonaje.cs

Script donde se define el evento OnGUI , que permite controlar tanto la pausa del videojuego, como la construcción de la barra de vida en la parte superior izquierda de la pantalla:

Colisión proyectil con enemigo (incremento de la variable contadorEnemigo)

Diagrama UML ataque jugador barra vida energia

AtaqueJugador.cs

Al igual que el script comentado anteriormente, controlará las colisiones que se produzcan, en este caso, entre el objeto golem y el objeto bala (prefab), invocando al método SendMessage en caso de que se produzca dicha colisión.

Como característica principal, el evento OnCollisionEnter , recibe como parámetro de entrada la clase Collision, que permitirá controlar, además de los puntos donde se produzcan colisiones, la velocidad de impacto. Para que este evento sea lanzado, será necesario añadir un componente de tipo Rigidbody al GameObject que contenga este script:

BarraVidaEnemigo.cs

Método que permite contabilizar el número de colisiones que se han producido entre el objeto golem y los proyectiles disparados por el jugador.

Se establece la condición de que el número de impactos sea múltiplo de un valor asignado, para además de instanciar un objeto de vida, que permita al jugador recuperar salud y aumentar la dificultad del videojuego, incrementando los parámetros asociados a la velocidad del enemigo.

Otra de las condiciones controladas desde este script, es la finalización del juego al superar al enemigo, manteniendo en todo momento actualizado el marcador de puntos:

 

Colisión de jugador con objeto de vida (aumento de la variable energiaPersonaje)

Diagrama UML recogervida aumentar salud

RecogerVida.cs

Script que implementa el evento OnTriggerEnter , que permite invocar al método aumentarVida() , al producirse la colisión entre el objeto Jugador y el objeto instanciado en tiempo de ejecución «Energía» (prefab, que no es más que un tipo de asset, formado por un GameObject con sus componentes y propiedades ya definidas):

AumentarSalud.cs

Script encargado de reproducir un sonido al colisionar el objeto jugador con el objeto de vida (se declara de tipo public, para posteriormente desde el editor de Unity asignarle la pista de audio a reproducir), además de aumentar la vida del jugador. Una vez se produzcan dichas acciones, se destruirá el objeto que contenga este script:

Diagrama clase destruirbala

DestruirBala.cs

Su funcionalidad radica en la destrucción de los objetos creados al lanzar proyectiles por parte del personaje que maneja el usuario:

Mostrar punto de mira en el centro de la pantalla

Diagrama UML clase Diana

Diana.cs

Script que controla la visualización del punto de mira del arma del personaje cuando este se encuentra en movimiento:

Diagrama clase Disparos

Disparos.cs

Permite al usuario disparar proyectiles al realizar una segunda pulsación en la pantalla. Como se puede apreciar en el código que se muestra a continuación, se instancia un componente Rigidbody, al que se asigna el nombre de un prefab, que contiene todas las propiedades necesarias para detectar colisiones con el enemigo:

Diagrama clase LogicaEnemigo

LogicaEnemigo.cs

Desde este script se controlará los diferentes estados del enemigo, reproduciendo las distintas animaciones, dependiendo del estado en el que se encuentre:

Diagrama clase SalirJuego

SalirJuego.cs

Este script permitirá salir del juego desde la pantalla de pausa, con tan solo seleccionar el componente TextMesh con el título «Salir del juego»:

Diagrama clase NuevaPartida

NuevaPartida.cs

Este script permite volver a comenzar una partida, declarando e inicializando en el método Start()  el máximo de vida para el personaje. También se implementa el evento OnTouchDown()  cuya funcionalidad será la de cargar el nivel construido (se indica como parámetro de entrada un string con el nombre de la escena):


 

Volver arriba
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies.    Más información
Privacidad