Scripting en unity #3

Retomando lo quedado en el post anterior:

  1. Scripting en unity
  2. Scripting en unity

Nuevamente agradecemos a Carlos Marton Pavon por darnos la posibilidad de compartir su material.


Componentes

Seguramente llegará un momento en el que querras saber si un GameObject tiene un componente específico o obtener una referencia a este componente para utilizarlo de alguna forma, un caso tìpico puede ser: Tenemos un script que maneja la cámara, así que necesitamos saber si el objeto al que estamos unidos tiene una cámara, como hacemos esto?

void Start(){

Camera cam; //primero declaramos la variable que almacenará la referencia a la cámara, para no estar pidiéndola todo el tiempo //this.gameObject lo utilizamos para indicarle que queremos obtener el componente de nuestro GameObject //GetComponent recibe como parámetro un tipo de componente, así que debemos pasarle el Tipo Camara. //GetComponent devuelve un componente, pero necesitamos una Cámara, cualquier script que podamos asignar a un GameObject, es un componente así que podemos castearlo utilizando la palabra as. cam = this.gameObject.GetComponent(typeof(Camera)) as Camera;
}

void Update(){
//luego podemos utilizar la cámara sin problema
cam.aspect = 1;
}

Una ves que tenemos el componente, podemos activarlo o desactivarlo de forma individual sin afectar al resto de los componentes de nuestro GameObject. Para esto basta con hacer:

cam.enabled = true;
cam.enabled = false;

Crear/Destruir un Componente

En muchos casos, necesitamos agregarle el componente al gameObject para poder utilizarlo. Hacer esto es bastante similar a obtenerlo, con la diferencia que en lugar de Get, utilizamos Add. La sintaxis es así:

Camera cam = gameObject.AddComponent(typeof(Camera)) as Camera;

Una ves que tenemos la referencia al componente, podemos operar sobre el y también destruirlo, para esto último debemos hacer lo siguiente:

GameObject.Destroy(cam);

Esto quitará el componente cámara de nuestro GameObject

Modificar valores del script desde editor

Unity te permite alterar los valores de las variables definidas en un script de forma muy sencilla desde el editor, lo único que debes hacer es declarar la variable pública

El código de la imagen de portada sería así:

public int variable;
public string nombre;
public Vector3 vector;
public bool check;
public byte AByte;
public int[] array;
public GameObject AgameObject;

Unity limita el tipo de input que puede recibir un campo a el tipo de variable, por ejemplo, si declaramos un public int este solo podrá recibir números, quitándonos la necesidad de verificar esto. También podemos declarar clases y hacerlas visibles en el editor si agregamos [System.Serializable] antes de su declaración, quedándonos algo así:

[System.Serializable]
public class Datos
{
public int variable;
public string nombre;
public Vector3 vector;
public bool check;
public byte AByte;
public int[] array;
public GameObject AgameObject;
}

Luego la utilizamos como una variable, desde código sería así:

public Datos data = new Datos(); //la inicializamos
void Start()
{
data.nombre = “nombre”; //accedemos a sus valores
}

Para asignar el GameObject podemos simplemente arrastrarlo desde nuestro inspector o hacer click en la set y buscar el objeto que necesitemos

Ten en cuenta que unity da prioridad a los valores definidos en el editor por lo que si al crear una variable le asignas un valor arbitrario desde código, digamos

public int a = 10;

luego vas al editor y ves que el valor es 10, muy útil pero… Esto es un arma de doble filo, ya que el editor toma 10 como valor y si te olvidas de esto, vuelves al código y asignas otro

public int a= 15;

pero la variable seguirá conteniendo un 10


En el grupo oficial de facebook que tenemos: Desarrolladores de Videojuegos [Comunidad]

Empezamos una votación para ver que serie de aprendizaje seguiremos posteando en este blog.

Comments

Deja un comentario

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