post

Dentro del ámbito de un videojuego, un punto de control o checkpoint no es más que una posición dentro del recorrido del jugador que, una vez alcanzada, hará que podamos volver a empezar desde dicha posición en caso de que nos maten sin necesidad de tener que volver a realizar todo el recorrido anterior.

En este tutorial vamos a crear un sistema de checkpoints que pueda ser aplicado en cualquier fase de nuestro videojuego de manera rápida y fácil. Empezamos…

Creación del script ‘CheckPoint.cs’

Vamos a implementar el script que irá asociado al objeto que represente a nuestro checkpoint, el cual construiremos más adelante, y que se encargará de controlar cuándo nuestro jugador pasa por dicho checkpoint para guardar el progreso de éste.

Definimos la variable pública ‘activated‘ que será la que indicará si el checkpoint está activado o no, es decir, si la última posición que está guardando nuestro sistema es la de ese checkpoint o no.

También definiremos la variable estáticaCheckPointsList‘ que será una lista de game objects donde almacenaremos todos los checkpoints que tengamos en nuestra escena.

Dentro de la función Start() inicializaremos la lista estática que hemos definido en el punto anterior con todos los checkpoints que encontremos en la escena. Para identificar qué objetos son checkpoints haremos uso de los tags de Unity y haremos que todos los checkpoints tengan asignado el tag ‘CheckPoint‘.

Ahora crearemos la función privada ‘ActivateCheckPoint()‘ que será la que se encargue de activar nuestro checkpoint actual y desactivar el resto.

Una vez creada dicha función haremos uso de ella cada vez que el jugador de nuestro videojuego pase por nuestro checkpoint. Para ello implementaremos el método ‘OnTriggerEnter()‘ que se ejecutará cada vez que el jugador (identificado con el tag ‘Player‘) entre en el trigger del checkpoint.

Tan solo nos falta implementar una función pública y estática que pueda ser llamada desde fuera de este script, por ejemplo desde el script que controle a nuestro jugador, y que nos devuelva la posición del último checkpoint que haya activado. Para ello crearemos la función ‘GetActiveCheckPointPosition()‘.

En este punto del tutorial te preguntarás por qué hemos declarado como estática tanto la variable ‘CheckPointsList’ como la función pública ‘GetActivateCheckPointPosition()’. La razón de ello es que el sistema de checkpoints que estamos construyendo nos va a permitir instanciar en una misma escena tantos objetos de tipo checkpoints como deseemos, pero dichos objetos tienen que poder coordinarse y comunicarse entre ellos para que cada vez que uno sea activado, el resto se desactiven y así poder mantener en una sola lista en memoria todos los checkpoints y su estado.

Creación del prefab ‘CheckPoint’

Una vez finalizada la implementación del script encargado de controlar el funcionamiento de nuestro sistema, vamos a pasar a crear el game object que representará a un checkpoint. Para ello bastará con que creemos en nuestra escena un simple objeto vacío con el tag ‘CheckPoint’ y al que añadiremos como componentes un Capsule Collider (con la opción “Is Trigger” activada) y nuestro script ‘CheckPoint.cs’.

Creación del tag 'CheckPoint'

Creación del tag ‘CheckPoint’

Game Object ‘CheckPoint’

El capsule collider (dibujado en verde en la imagen) será la zona del checkpoint que detectará a nuestro jugador y por tanto hará que lo active, por ello es recomendable que la altura y radio del collider sea lo suficientemente grande como para detectar al jugador cuando pase por delante.

Con nuestro game object ‘CheckPoint’ creado, tan solo nos falta convertirlo en prefab. Para ello arrastramos el objeto a una carpeta de nuestra vista de proyecto.

Prefab ‘CheckPoint’

Ya tenemos el prefab de nuestro checkpoint listo para poder usarlo donde queramos y cuantas veces queramos.

Uso de varios checkpoints en una escena

Uso de varios checkpoints en una escena

Nota: Como funcionalidad extra, queda a la elección del lector crear el game object ‘CheckPoint’ de manera más compleja que un simple objeto vacío. Por ejemplo añadiéndole algún elemento visual que ayude a identificarlo en el juego o incluso creándole alguna animación para indicar cuándo ha sido activado o desactivado.

Uso del sistema de checkpoints

Para que nuestro jugador pueda empezar desde el último checkpoint activado bastará con que realice una llamada a la función estática ‘CheckPoint.GetActiveCheckPointPosition()‘ y ésta nos devolverá la posición del checkpoint para así re-posicionar al jugador.

Este sería un buen ejemplo de uso: en el script controlador de nuestro jugador, en la función ‘OnCollisionEnter()’, si detectamos que un enemigo nos ha tocado querrá decir que nos han matado y sería el momento de volver a la posición del último checkpoint activado.

Descargar proyecto

En mi perfil de GitHub podrás encontrar un proyecto de Unity 5 en el que implemento un ejemplo básico de este sistema de checkpoints y que puedes descargar libremente.

DESCARGAR PROYECTO

Acerca de Santi Andrade

Canturreo canciones, hago cosas raras de informáticos y amo las croquetas. Web & Unity Game Developer y miembro de la banda de rock 'Histeria Innokua'. histeriagamedev.wordpress.com | Sígueme en Twitter

3 respuestas sobre “Unity: Creación de puntos de control (checkpoints)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *