REFERENCE: GUI e GUITexture

Veja na demo abaixo alguns dos usos das Classes que vamos ver nessa aula. No jogo abra a janela. Repare que o cursor de projetil fica SOBRE ela e o botão. A janela é dragável. Prá quem não se lembra, atirar apertando o botão direito do mouse, depois de pegar a bazuca. Atirar perto da jaula para destruí-la:




OBJETO

A Classe GUI tem um procedimento exótico: seus métodos (que, na maioria das vezes, são criadores de Controls) devem ser colocados dentro do evento que é um loop: OnGUI.

O prefixo (ponteiro, objeto-referencia) para os elementos da Classe GUI(em JavaSript) será:

GUI

Já, uma GUITexture, não precisa estar dentro do nenhum OnGUI e pode ser criada graficamente a partir da Barra Superior com: gameObject|CreateOther|GUITexture . Sempre vem já com o logo do Unity, que você muda no Inspector, depois de importar o seu. Crie o prefixo com uma variável, no script (veja exemplo abaixo).

DICA: Para fazer os controls aparecerem em "tempo de Editor", coloque lá em cima no script:

@script ExecuteInEditMode()



PROPRIEDADES DA GUI

color                                               Contendo um elemento da Classe Color (Color.red, por exemplo)
                                                    muda a cor de TODOS os controls.

backgroundColor                                     Idem, mudando a cor dos backgrounds (se existirem).

changed                                             Retorna booleano indicando se qualquer valor de control foi mudado. 

enabled                                             Com booleano,liga/desliga TODOS os controls. 

depth                                               Se existirem vários OnGUI no jogo, depth definirá
                                                    que control fica por cima se se sobrepuserem
                                                    Quanto MENOR mais em cima.  


PROPRIEDADES DA GUITexture

transform.position.x                               A posição é a do centro da textura. Vai de 0,0 para o canto
transform.position.y                               inferior esquerdo  da tela do jogo até 1,1 para o superior
                                                   direito.

enabled                                            Com booleano,liga/desliga.                                            


EVENTO DA GUI


OnGUI                                              Todos os métodos devem ser criados dentro desse loop.

MÉTODOS DA GUI

   
Label(new Rect(x,y,largura,altura),texto);
Label(new Rect(x,y,largura,altura),textura);         Criar antes a textura com: var textura:Texture2D;

Button(new Rect(x,y,largura,altura),texto);          Retorna "true" quando clicado. 
Button(new Rect(x,y,largura,altura),textura);        Usar dentro de um "if" para disparar uma ação.

var valor : String = "valor inicial";
valor=GUI.TextField(new Rect(x,y,largura,altura),valor);  O usuário entrando com um valor, esse fica disponível 
						         após evento (if) com Button ou changed.
                                                         Entrada é string, que pode ser convertido (ver abaixo)
                                                         Existe um PasswordField.

var texto : String = "Primeira linha\nSegunda linha";
TextArea(new Rect(x,y,largura,altura),texto);   Quadro para mostrar várias linhas.

var valor : float =  valor inicial  ;
valor=GUI.HorizontalSlider(Rect (x,y,largura,altura), valor, mínimo,máximo);

var valor : float =  valor inicial  ;
valor=GUI.VerticalSlider(Rect (x,y,largura,altura), valor, mínimo,máximo);
    
 
var windowRect : Rect = Rect (x,y,largura,altura);
windowRect = GUI.Window (ID da janela, windowRect, nome-da-função-criadora,título);

Deve-se criar depois uma função com nome-da-função-criadora que vai ter o conteudo da janela. Pode-se, 
nesse caso,criar controls fora do OnGUI.Ver exemplo abaixo.

GUI.DragWindow (Rect (x,y,largura,altura da área dragável));   Para dragar janela.Usar dentro da função-criadora.
                                                               20 é OK para altura da área dragável,que  bloqueia click.

Para esclarecer, vai aqui o script de janela da demo:
var renderizar : boolean  = false;  
var windowRect : Rect = Rect (20, 20, 120, 200); // se mudar, verificar no Inspector
var janelaEscondida = true;

function mostraJanela(){
 renderizar = true;
}
function escondeJanela(){
 renderizar = false;
}

function OnGUI() {
 GUI.depth = 1; //layer mais baixo que 0
  
 if (GUI.Button(new Rect(Screen.width-100, Screen.height-30, 90, 20), "Help-On/Off")){
	
  if (janelaEscondida == true){
   mostraJanela();
   janelaEscondida = false;
  }
  else{
   escondeJanela();
   janelaEscondida  = true;
  }
 }

 if (renderizar) {
  windowRect = GUI.Window (1, windowRect, janela1, "HELP");
 }
}

function janela1 (windowID : int) {
 GUI.DragWindow (Rect (0,0, 120, 20)); //20 é altura da área de dragar bloqueia click
  var texto : String = "Primeira linha\nSegunda linha";
 GUI.TextArea(new Rect(10,25,100,165),texto);   
}



LINKS PARA EXEMPLOS NO CURSO

A primeira vez que falamos de GUI foi

nessa lição

Ensinamos como usar um GUI.Label para mudar o ponteiro para uma "mãozinha"

nessa lição

Sobre entrada de dados, falamos em várias lições, até em jogos multiplayer, como pode ser visto

nessa lição



COMENTÁRIOS ADICIONAIS

Um cara chamado Eric Haines, criou um script para dar suporte a se fazer "fade" (a imagem ir sumindo) de GUITexture e colocou esse script disponível. Você pode baixá-lo

rightclicando aqui.

Para usar, coloque esse script num gameobject vazio e, no script onde vai fazer o fade, crie uma variável que vai ser ponteiro desse script:

var f: Fade;
arrastando o nome do gameobject vazio para essa variável, no Inspector.

As funções a serem usadas (depois de criada uma variável com a GUITexture), têm o reference:

yield f.use.Alpha(variável-da-GUITexture, 1.0, 0.0, 5.0, EaseType.Out);//para fade-out
yield f.use.Alpha(variável-da-GUITexture, 0.0, 1.0, 5.0, EaseType.In);//para fade-in

O valor 5.0 marca a duração do fade e pode ser mudado.

O recurso usado para fazer fade se chama "alphachanel". Num control "normal" (da Classe GUI) existe esse "alphachanel" na propriedade "color" e a gente pode captá-lo usando: color.a

Veja o script da introdução da demo acima:

var color : Color;
var texto = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var titulo: GUITexture;
var logo: GUITexture;
var f: Fade;
function Start(){
 color=Color.red;
 color.a=0;
 titulo.enabled=false;
 yield f.use.Alpha(logo, 1.0, 0.0, 5.0, EaseType.Out);
 yield WaitForSeconds(0.5);
 titulo.enabled=true;
 yield f.use.Alpha(titulo, 0.0, 1.0, 5.0, EaseType.In);
 yield WaitForSeconds(0.5);
 yield f.use.Alpha(titulo, 1.0, 0.0, 5.0, EaseType.Out); 
    
 texto = "MODELAGEM: Miguel Angelo       "; 
 yield FadeInAfterTime(1);
 yield FadeOutAfterTime(1);
 texto = "PROGRAMAS: Charles Bagage"; 
 yield FadeInAfterTime(1);
 yield FadeOutAfterTime(1);
 texto = "DIRETOR: Esteves  Piuberro   "; 
 yield FadeInAfterTime(1);
 yield FadeOutAfterTime(1);
 Application.LoadLevel("fase2");//chama o jogo 
}
 
function OnGUI(){
 GUI.color = color;
 GUI.Label (Rect (Screen.width/2-100, Screen.height/2-20, 200, 40), texto);
}

function FadeOutAfterTime(time : float){
 yield WaitForSeconds(time);
 yield Fade();
}
function FadeInAfterTime(time : float){
 yield WaitForSeconds(time);
 yield Desfade();
}

function Fade(){
 while (color.a > 0){ 
   color.a -= Time.deltaTime;
   yield;
 }
}
function Desfade(){
 while (color.a <=1){ 
  color.a += Time.deltaTime;
  yield;
 }
}

IMPORTANTE: Para que seu texto apareça com caracteres "brasileiros", no editor do script (UniScite) selecione:

File | Encoding | UTF-8 with BOM
.

Antes de escrever o programa e antes de salvar, claro.

Para trabalhar com números "brasileiros" devemos usar uns recursos do JavaScript "clássico" (ECMAScript) como pode ser visto na "máquina de somar" abaixo:

var valor1:String; 
var valor2:String;
private var v1:float;
private var v2:float;
var resultado:String;

function OnGUI () {

 valor1 = GUI.TextField (Rect (10, 10, 200, 20), valor1,25 );

 valor2 = GUI.TextField (Rect (10, 30, 200, 20), valor2,25 );
 valor1 = valor1.Replace(",","#");
 valor1 = valor1.Replace(".","&");
 valor1 = valor1.Replace("&",",");
 valor1 = valor1.Replace("#",".");
 valor2 = valor2.Replace(",","#");
 valor2 = valor2.Replace(".","&");
 valor2 = valor2.Replace("&",",");
 valor2= valor2.Replace("#",".");

 if (GUI.Button (new Rect(10,50,80,30),"Soma")) {
  v1 = parseFloat(valor1);
  v2 = parseFloat(valor2);

  resultado = (v1+v2).ToString( );
  resultado = resultado.Replace(".",",");
 }
 GUI.TextField (Rect (10, 80, 200, 20), resultado, 25);
} 



LIÇÃO ANTERIOR PRÓXIMA LIÇÃO
ÍNDICE HOME PAGE