UN POCO DE CÓDIGO

Ahora que tenemos nuestro primer script, vamos a empezar a ver algo de código. Sería pertinente que para esto tengan conocimientos básicos de programación, más que nada para entenderse bien con alguna que otra palabra propia de programación que voy a ir poniendo.

Haciendo doble click en el archivo de código que acabamos de crear, debería abrirse el editor por defecto, que ya depende de lo que tengan ustedes instalado. Unity suele venir con 2: Visual Studio y MonoDevelop. Pero si no instalaron ninguno o instalaron otro ya queda a criterio de ustedes. En mi caso, yo preferiría Rider.

Al abrir el editor, el código tendrá un formato como este:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hero : MonoBehaviour
{
    // Use this for initialization
    void Start ()
    {
        
    }
    
    // Update is called once per frame
    void Update ()
    {
    
    }
}

 

 

Esto es el código base que crea Unity al crear un script nuevo. No es necesario que todos los script lo tengan, pero que tenga algunas de estas partes nos permiten determinadas cosas. Por ejemplo, noten que nuestro script hereda de MonoBehaviour:

 

public class Hero : MonoBehaviour

 

Esta es la parte que hace que podamos tirar este script dentro de un GameObject, o sea, lo que lo convierte en un componente. Para este post no es necesario que tengan conocimientos de herencia, pero vendría bastante bien para poder entender mejor el funcionamiento de Unity. Para más información, pueden ver el post de Herencia y Polimorfismo.

Como verán, el script que acabamos de crear ya viene con dos bloques declarados, llamados Start() y Update(). Dichos bloques tienen dos funcionalidades bastante particulares, propias de Unity. Además, funcionan si el “ : MonoBehaviour” está al principio del script. Ambos bloques se ejecutan automáticamente. Las funcionalidades son:

  • Start() => Se ejecuta en el siguiente frame luego de haber creado el objeto (si se crea deshabilitado se ejecuta cuando se habilite).
  • Update() => Se ejecuta por frame a frame.

Creo que si son de jugar o tienen conocimientos trabajando con juegos no hace falta explicar demasiado que es un Frame. Así que sólo voy a decir que cada imagen que va a pintar la placa de video de nuestro juego representa un frame, o sea que, por ejemplo, el bloque Update() se ejecutaría cada vez que la placa de video pinte una imagen de nuestro juego que, en condiciones ideales podrían ser unos 60FPS (frames por segundo).

Volviendo al código… Tenemos una sentencia que podemos escribir para que Unity muestre mensajes cuando pase alguna cosa: La clase Debug. Por ejemplo:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hero : MonoBehaviour
{
    // Use this for initialization
    void Start ()
    {
        Debug.Log("Hola mundo!!");
    }
    
    // Update is called once per frame
    void Update ()
    {
    
    }
}

 

 

En este ejemplo, luego de que el objeto esté inicializado, mostrará un mensaje, que fue el que le pusimos en el bloque Start(). Para testear cómo funciona hasta el momento, hagan click en el botón “Play” y el juego empezará. Van a notar que notar que ningún mensaje sale, y esto es porque el script aún no está funcionando. Para que funcione, debemos arrastrarlo a nuestra nave. Simplemente hay que hacer un drag hacia el GameObject o un click en el botón “AddComponent” y elegir nuestro componente.

 

 

Como podrán ver, el componente aparece ahora en la ventana de “Inspector” de nuestro proyecto (cuando seleccionamos el GameObject del héroe), y podemos ver que nuestro componente está dentro. Si le damos “Play” ahora, el mensaje debería salir en la ventana de “Console“. Lo que quiere decir que FUNCIONÓ!! Ahora tenemos funcionando nuestro primer componente, con lo cual desde acá ya pueden empezar a experimentar por el lado que ustedes más prefieran.

 

PARA PROBAR...

Ahora que vieron cómo funciona Start() prueben qué pasa si ponen ese mensaje en el bloque Update(). ¿Qué pasa?

 

Si hicieron la prueba anterior, van a notar que el mensaje sale un montón de veces. Esto es porque CADA VEZ que Unity va a pintar un frame, ejecuta el bloque Update(). Esta parte la vamos a utilizar para hacer todas aquellas cosas que necesitamos hacer durante la vida útil que tenga nuestro GameObject. Por ejemplo, mientras el juego transcurra, acá podemos chequear determinadas teclas, movimientos y demás cosas respecto de nuestra nave.