87. CLASE GUI (IV)










Button:

static function Button (position : Rect, text : String) : boolean
static function Button (position : Rect, image : Texture) : boolean
static function Button (position : Rect, content : GUIContent) : boolean
static function Button (position : Rect, text : String, style : GUIStyle) : boolean
static function Button (position : Rect, image : Texture, style : GUIStyle) : boolean
static function Button (position : Rect, content : GUIContent, style : GUIStyle) : boolean

Función que crea un botón que, al ser pulsado por un usuario, dispara algún tipo de evento.

Una cosa que puede llamar la atención inicialmente, y que tiene mucho que ver con la manera un poco atípica de usar esta función, es que retorna un booleano que es establecido en true cuando el usuario hace click sobre el botón. De esta suerte, la función devolverá false hasta que se pulse el botón, lo que implica en la práctica que esta función se suele usar tras una declaración if, como enseguida veremos.

Antes detengámonos un momento en los parámetros, que ya nos deberían sonar:


position: Rectangulo en la pantalla a usar para el botón.
text: Texto a mostrar en el botón.
image: Textura/imagen a mostrar en el botón.
content: Texto, imagen y tooltip para este botón.
style: El estilo a usar. Si no se indica, se aplicará el estilo para
botones que tenga el GUISking que se esté usando.


Y ahora es el momento de entender con un ejemplo lo que os comentaba antes sobre la peculiar manera de usar la función button:


var unaTextura : Texture;

function OnGUI() {
if (!unaTextura) {
Debug.LogError("Asigne por favor una textura en el inspector");
return;
}
if (GUI.Button(Rect(10,10,50,50),unaTextura))
Debug.Log("Has hecho click en el botón que tiene una imagen");
if (GUI.Button(Rect(10,70,50,30),"Click"))
Debug.Log("Has hecho click en el botón con texto");
}


Vamos por partes. Salvamos el script y, sin arrastrar ninguna textura a la variable expuesta que nos debería aparecer en el inspector al tener PortaScripts seleccionado, pulsamos play. Nos aparecerá un mensaje de error avisándonos de que debemos arrastrar dicha textura. Es esta una variande de Debug.Log llamada Debug.LogError, que hace que el mensaje aparezca en rojo.

Detenemos el reproductor, arrastramos la textura y volvemos a pulsar play. Observaremos que nos aparecen dos botones, uno con la textura arrastrada por nosotros, otros con el texto indicado, y que al pulsarlos aparecen en pantalla sendos textos.

Lo que personalmente me parece más interesante de todo esto es la manera de utilizar la función:

if (GUI.Button(Rect(10,70,50,30),"Click"))


Pensemos que con esta declaración estamos haciendo dos cosas: primero, al pasarla como condición de if nos aseguramos de que una vez el user clicke el botón y por ende la función Button devuelva true, se ejecutará las declaraciones que se vean afectadas por ese if. Pero, además, previo a devolver true o false, Unity ejecuta la función, y por consiguiente se renderiza el botón en la pantalla.


RepeatButton:

static function RepeatButton (position : Rect, text : String) : boolean
static function RepeatButton (position : Rect, image : Texture) : boolean
static function RepeatButton (position : Rect, content : GUIContent) : boolean
static function RepeatButton (position : Rect, text : String, style : GUIStyle) : boolean
static function RepeatButton (position : Rect, image : Texture, style : GUIStyle) : boolean
static function RepeatButton (position : Rect, content : GUIContent, style : GUIStyle) : boolean


Función que crea un botón que está activo mientras el usuario lo presiona.


TextField:


static function TextField (position : Rect, text : String) : String

static function TextField (position : Rect, text : String, maxLength : int) : String
static function TextField (position : Rect, text : String, style : GUIStyle) : String
static function TextField (position : Rect, text : String, maxLength : int, style : GUIStyle) : String

Crea un campo de texto de una línea donde el usuario puede editar un string. Devuelve un string con el texto editado.

Tiene estos parámetros:


position: Rectángulo en la pantalla a usar para el campo de texto.
text: Texto a editar. El valor de retorno debe ser reasignado de vuelta al
string tal como se enseña en el próximo ejemplo.
maxLength: La longitud máxima del string. Si no se indica, el usuario puede
escribir sin ningún tipo de límite.
style: El estilo a usar. Si no se indica, se aplicará el estilo para
textField que tenga el GUISkin en uso.


Esta función es importante porque permite una mayor interactividad con el usuario que meramente pulsar determinamos botones. Por ello es importante que el texto que dicho usuario introduce se almacene debidamente. Tal como indica el manual de referencia al hablar del parámetro text, la solución ideal es inicializar una variable string con el valor que le damos por defecto, y reutilizar dicha variable para posteriormente contener el string ya modificado y devuelto por la función. En definitiva:


var mensaje : String = "Escribe algo";

function OnGUI () {
mensaje = GUI.TextField (Rect (10, 10, 200, 20), mensaje, 25);
Debug.Log(mensaje);
}


Como veis, la idea es que "mensaje" sirva tanto para contener el string inicial como el modificado. Le he añadido a continuación un Debug.Log para que comprobéis en tiempo real cómo va cambiando el contenido de la variable.


PasswordField:

static function PasswordField (position : Rect, password : String, maskChar : char) : String
static function PasswordField (position : Rect, password : String, maskChar : char, maxLength : int) : String
static function PasswordField (position : Rect, password : String, maskChar : char, style : GUIStyle) : String
static function PasswordField (position : Rect, password : String, maskChar : char, maxLength : int, style : GUIStyle) : String

Crea un campo de texto donde el usuario puede introducir una contraseña. Devuelve un string con la contraseña editada.

Cuenta con los siguientes parámetros:


position: Rectángulo en la pantalla a usar para el campo de texto.
password: Contraseña a editar. El valor de retorno de esta función debe ser
reasignado al string que contenía el valor original.
maskChar: El carácter con el que queremos enmascarar la contraseña.
maxLength: La longitud máxima del string. Si no se indica, el usuario no tendrá
límite para escribir.
style: El estilo a usar. Si no se indica, se usará el estilo para textfield
que tenga el GUISkin que se esté usando.


Podemos apreciar que en definitiva esta función es como la anterior, con la salvedad de que en la presente le añadimos un carácter (tradicionalmente un asterisco) que queremos que aparezca en pantalla cuando el usuario teclee su contraseña.


var miPin : String = "";

function OnGUI () {
miPin = GUI.PasswordField (Rect (10, 10, 200, 20), miPin, "*"[0], 25);
}

POSTED BY UnityScripts
POSTED IN
DISCUSSION 0 Comments

Leave a Reply

Con la tecnología de Blogger.