martes, 3 de marzo de 2015

Crea un videojuego con Unity3d (Programación VII Cómo hacer un cronómetro)

Siempre lo primero:
El primer artículo de Crear un videojuego con Unity3d para que podáis seguir el orden.

Todo juego tiene que tener un enemigo con el cual retar tus habilidades, ya sea físico, abstracto o de cualquier tipo.

Como hablamos en el artículo anterior, donde se explicaba el Game Manager  hoy crearemos nuestro enemigo principal: el Tiempo.

¿Cómo hacemos que el tiempo sea un enemigo?
Sencillo, usando un tiempo determinado para completar los objetivos.

¿Cómo hacer un cronómetro en C#?


Bueno, empezaré por explicar antes lo que es un cast  muy por encima, este cast lo que hace es cambiar un tipo de variable a otro.



Vamos con el caso práctico:



Nosotros tenemos una variable de tipo float, pero resulta que solo nos interesa (por lo que sea) la parte entera del numero, ergo, ¿para qué gastar memoria con los decimales cuando podemos convertir esa variable de float a integer. (int)


¿Para qué queremos hacer esto?

Bien, fijaros en la imagen: 
En la parte de las variables he declarado TRES nuevas variables, 2 de tipo int (minutos y segundos) y UNA de tipo float si queremos operar entre ellas, tal cual están ahora, solo podríamos hacerlo con las dos del mismo tipo (por regla general) así que necesitamos convertir el float a int 

Pero antes de hacer la conversión lo que haremos es la función que nos va a servir para crear el cronometro: 
Aquí paso a explicar lo que hacemos dentro de la función Cronometro 

1-Primero la declaramos:
void Cronometro (){

2- acto seguido escribimos que el valor de LA VARIABLE crono sea su mismo valor + la cantidad que pasa de tiempo:
crono += Time.deltaTime;

3-Aquí es cuando HACEMOS ELCAST (Recuadro azul)
 Lo que hacemos es decirle al código "del valor de crono (que es tipo float) yo solo quiero la parte entera, así que convertimos el float a int  de la forma que está escrita:
(int)crono 
en este apartado y el siguiente operamos entre integers así que tendremos el resultado deseado en cada variable, para los minutos y para los segundos.

4-NUEVO (Recuadro verde), una vez a llegado a los minutos que nosotros deseamos hacemos que empiece una nueva escena, para ello usamos el Application.LoadLevel (" "); IMPORTANTE entre las comillas debe haber el nombre TAL CUAL de la escena que queramos cargar, en mi caso es una nueva escena vacía, llamada "Menu" 

5-Si queremos podemos hacer el Debug.Log del crono para que aparezca por consola.
}

6- Si queremos que toda la función se ejecute constantemente donde debemos llamarla? Exacto! en el Update() si no ya podemos esperar a que pase algo que nos van a dar las navidades.

MUY BIEN! Con esto ya tenemos CASI nuestro prototipo acabado \(^.^)/!
Solo nos falta aprovechar una script que ya tenemos hecha de los primeros pasos en programación
La script: Timer os acordáis?
Bueno, aprovechando que usamos esta script tengo que decir que uno de los fundamentos de la programación orientada a objetos es hacer las cosas lo más abstractas posible para poder usarlas una y otra vez sin necesidad de volver a picar código, de ahí que el primer script que os hice hacer era un crono inverso, porque ahora solo con escribir que cuando acabe el crono se ejecute de nuevo la escena del juego (con el Application.LoadLevel("")) ya tenemos todo el código del prototipo hecho.

Si no hubiéramos aprovechado esta script, deberíamos escribir TODO de nuevo y nos llevaría más tiempo.

Esta script se la añadimos a la cámara de la nueva escena, por ejemplo, para que funcione debe estar en cualquier objeto de la escena, cómo por ahora no hay nada más, pues se lo añadiremos a ella.

Para acabar, algo muy importante para que el Application.LoadLevel("") funcione es que deben estar todas las escenas en la Build Settings, esta ventana flotante se encuentra en File  le dais a Build Settings y simplemente arrastramos las escenas que deseemos desde Project a la ventana flotante:


La semana que viene: la preparación y ejecución de la GUI !

Artículo de Programación Anterior                   Siguiente

No hay comentarios:

Publicar un comentario