3. CLASE OBJECT (I)



Ha llegado el momento de empezar a pelearnos con las clases que componen la API de Unity, y tal como os comentaba considero lo más conveniente empezar con la clase base.

Es sabido que en POO las clases base de las que heredan las demás suelen tener una funcionalidad bastante limitada, cuando no inexistente, siendo su función más la de punto de partida de las que habrán de heredarla que la de instanciar objetos de dicha clase. La clase Object, que es con la que vamos a empezar, no parece ser una excepción a esta regla.



La clase Object consta de dos variables, dos funciones y nueve funciones de clase (FC). Como sabréis, las funciones de clase se diferencian de las funciones standard en que aquéllas no precisan ser llamadas por una instancia u objeto de la clase, perteneciendo -como su nombre indica- a la clase y no a las instancias de dicha clase.


VARIABLES:

name:

var name : String

Bueno, esta variable ya la conocíamos. Hace referencia al nombre del objeto, y comparten ese nombre tanto el objeto en sí como los componentes de dicho objeto. Esta variable nos sirve tanto para cambiar el nombre a nuestro objeto...

name = "Cualquier nombre";

...como para obtener el nombre de un objeto.

Probemos esta segunda opción con un ejemplo muy sencillo. Abrimos Unity y nos vamos a la escena que creamos en la lección anterior. En la vista del proyecto, hagamos doble click en el script que llamamos miPrimerScript. Una vez se abre el editor, borramos todo el contenido y:


function Update(){
Debug.Log(name);
}

Como vimos en la lección anterior, Debug.Log nos permite imprimir en pantalla el valor de lo que se halle entre paréntesis. Salvamos el script (pero no cerramos el editor, meramente lo minimizamos)

Hay una cuestión que no quiero dejar pasar por alto. Lo que hemos modificado y guardado es el script que se halla en la carpeta de proyecto. No obstante, al hacer eso automáticamente se modifican todas las copias de este script que tengamos por ahí. En el caso que nos ocupa, recordaremos que a nuestro cubo le habíamos añadido una copia de este script, que a estas alturas por lo expuesto ya habrá sido modificado.

Probémoslo. Si le damos al play, observaremos que bajo la ventana game aparece el nombre de nuestro cubo.

Todo bien hasta aquí. no obstante, en la definición del manual de referencia dice que todos los componentes del objeto comparten el mismo nombre. Si echamos un vistazo a nuestro cubo en el inspector, observaremos que entre otros componentes tiene uno llamado transform, así que vamos a hacer la prueba.

Sustituimos el "name" que habíamos escrito en el editor de scripts entre paréntesis por transform.name. O sea:

Debug.Log(transform.name);

Guardamos el script, le damos al play y....Voilá!, el componente transform comparte el nombre "cubo".



hideFlags:

var hideFlags : HideFlags

Esta variable no parece a priori tener una gran utilidad. Se conseguiría con su manipulación hacer que un determinado objeto desaparezca o bien del inspector, o bien de la jerarquía, o impedir que dicho objeto se pueda editar, o no permitir que un objeto sea salvado con la escena y en consecuencia destruído con la nueva escena que se cargue.

Para tal fin esta variable manera las diferentes opciones de una de las muchas enumeraciones que hay en Unity. Esta enumeración, de nombre HideFlags, tiene las siguientes opciones:

HideInHierarchy____El objeto no aparecerá en la jerarquía.
HideInInspector____El objeto no aparecerá en el inspector.
DontSave_____El objeto no será salvado en la escena ni destruido en la nueva que se cargue.
NotEditable______El objeto no será editable en el inspector.
HideAndDontSave___Combinación de HideInHierarchy y DontSave.


Así, si por ejemplo quisiéramos (no se me ocurre muy bien para qué) que el cubo desapareciera del inspector mientras se desarrolla el juego, le vincularíamos un script parecido a este:

var meEvaporo: GameObject;meEvaporo.hideFlags = HideFlags.HideInInspector;

Este script lo podríamos arrastrar a la cámara principal, y con posterioridad arrastrar nuestro cubo en la variable global meEvaporo, que está esperando un gameObject. Observaremos que cuando le demos al play, el cubo desaparece del inspector.

¿Por qué meEvaporo es de tipo GameObject?¿No debería tratarse de un Object, que es la clase que estamos tratando?. Pues efectivamente, pero sucede que si sustituimos GameObject por Object en nuestro script, comprobaremos que desaparece del inspector la variable meEvaporo, posiblemente por lo que decía al principio de la lección de que la clase Object está pensasa como clase base para dotar de funcionalidad a las que la heredan, que para ser instanciada ella misma.

En cualquier caso, como digo, no parece que hideFlags sea una variable que vayamos a usar mucho.

Y hasta aquí por hoy. En el próximo capítulo seguiremos con las funciones de esta clase.

POSTED BY UnityScripts
POSTED IN
DISCUSSION 2 Comments

2 Responses to : 3. CLASE OBJECT (I)

  1. Muchas gracias, cuanto detalle en las explicaciones, genial!
    Saludos.

  2. var hideFlags : HideFlags

    DontSave_____El objeto no será salvado en la escena ni destruido en la nueva que se cargue.

    tengo entendido que esa variable, se utiliza para realizar cosas en modo debug, que al ser compilado para su distribución final, no son tomadas en cuenta, es como si no existieran...

Leave a Reply

Con la tecnología de Blogger.