sábado, 23 de noviembre de 2013

Efectos de escala en la GUI de Unity3D.

Saludos amigos.

En esta ocasión os traigo un ejemplo de como crear efectos de escalado en los botones de la GUI.





#pragma strict
#pragma downcast

import System;

// EfectosEscalaGui.js

var alfaGUI : float = 1;
private var escala : float = 1;

//_Efecto boton con escala over
private var escalaOver : float = 0;
var escalaOverBoton : float = 5f;

var rectBoton : Rect = new Rect (20, 20, 80, 80);
var textura_0 : Texture2D;

//Efecto box con escala lateral arriba derecha, abajo izquierda
var rectBox : Rect = new Rect (100, 20, 20, 20);
var V2_0 : Vector2 = Vector2(80, 80);
var velocidadEscalaV2_0 : float = 20f;

//Efecto box con escala vertical arriba abajo 
var rectBox1 : Rect = new Rect (180, 20, 80, 20);
var V2_1 : Vector2 = Vector2(80, 80);
var velocidadEscalaV2_1 : float = 20f;

//Efecto box con escala lateral derecha izquierda 
var rectBox2 : Rect = new Rect (260, 20, 20, 80);
var V2_2 : Vector2 = Vector2(80, 80);
var velocidadEscalaV2_2 : float = 20f;

// Pantalla
private var ancho : int = 0;
private var alto : int = 0;

var log : boolean = true;

function OnGUI () {
 
 var e1 = Input.mousePosition;
 e1.y = Screen.height - e1.y;
 
 GUI.BeginGroup (new Rect (0, 0, Screen.width, Screen.height));
  
  GUI.color.a = alfaGUI;
  //Inicio:: Efecto boton con escala over
  var r : Rect = Rect((rectBoton.x*escala)-escalaOver,(rectBoton.y*escala)-escalaOver,
       (rectBoton.width*escala)+escalaOver*2,(rectBoton.height*escala)+escalaOver*2);
  
  if (GUI.Button(r,textura_0)){
   if(log){Debug.Log("Click Boton");}
  }
  
  if (r.Contains(e1)){
   if(log){Debug.Log("Dentro del rectangulo del boton");}
   escalaOver = escalaOverBoton;
  }else{
   escalaOver = 0;
  }
  //Fin :: Efecto boton con escala over
  
  //Inicio:: Efecto box con escala lateral arriba derecha, abajo izquierda
  var r2 : Rect = Rect(rectBox.x*escala,rectBox.y*escala,
       rectBox.width*escala,rectBox.height*escala);
  
  GUI.Box(r2,textura_0);
  
  if (rectBox.width*escala < V2_0.x*escala){
   if(log){Debug.Log("Escalando ancho rectBox hasta V2_0.x");}
   rectBox.width += velocidadEscalaV2_0*Time.deltaTime;
  }
  if (rectBox.width > V2_0.x){
   rectBox.width = V2_0.x;
  }
  
  if (rectBox.height*escala < V2_0.y*escala){
   if(log){Debug.Log("Escalando alto rectBox hasta V2_0.y");}
   rectBox.height += velocidadEscalaV2_0*Time.deltaTime;
  }
  if (rectBox.height > V2_0.y){
   rectBox.height = V2_0.y;
  }
  //Fin :: Efecto box con escala lateral arriba derecha, abajo izquierda
  
  //Inicio:: Efecto box con escala vertical arriba abajo 
  var r3 : Rect = Rect(rectBox1.x*escala,rectBox1.y*escala,
       rectBox1.width*escala,rectBox1.height*escala);
  
  GUI.Box(r3,textura_0);
  
  if (rectBox1.width*escala < V2_1.x*escala){
   if(log){Debug.Log("Escalando ancho rectBox1 hasta V2_1.x");}
   rectBox1.width += velocidadEscalaV2_1*Time.deltaTime;
  }
  if (rectBox1.width > V2_1.x){
   rectBox1.width = V2_1.x;
  }
  
  if (rectBox1.height*escala < V2_1.y*escala){
   if(log){Debug.Log("Escalando alto rectBox1 hasta V2_1.y");}
   rectBox1.height += velocidadEscalaV2_1*Time.deltaTime;
  }
  if (rectBox1.height > V2_1.y){
   rectBox1.height = V2_1.y;
  }
  //Fin :: Efecto box con escala vertical arriba abajo 
  
  //Inicio:: Efecto box con escala lateral derecha izquierda
  var r4 : Rect = Rect(rectBox2.x*escala,rectBox2.y*escala,
       rectBox2.width*escala,rectBox2.height*escala);
  
  GUI.Box(r4,textura_0);
  
  if (rectBox2.width*escala < V2_2.x*escala){
   if(log){Debug.Log("Escalando ancho rectBox2 hasta V2_2.x");}
   rectBox2.width += velocidadEscalaV2_2*Time.deltaTime;
  }
  if (rectBox2.width > V2_2.x){
   rectBox2.width = V2_2.x;
  }
  
  if (rectBox2.height*escala < V2_2.y*escala){
   if(log){Debug.Log("Escalando alto rectBox2 hasta V2_2.y");}
   rectBox2.height += velocidadEscalaV2_2*Time.deltaTime;
  }
  if (rectBox2.height > V2_2.y){
   rectBox2.height = V2_2.y;
  }
  //Fin :: Efecto box con escala lateral derecha izquierda 
  
 GUI.EndGroup ();
 
 if (GUI.Button(Rect(Screen.width-80,10,80,20),"Reset")){
  if(log){Debug.Log("Reset");}
  rectBox = new Rect (100, 20, 20, 20);
  rectBox1 = new Rect (180, 20, 80, 20);
  rectBox2 = new Rect (260, 20, 20, 80);
 }
 
}

function Start () {

}

function Update () {
 
 ancho = Screen.width;
 alto = Screen.height;
 EscalaGUI ();
 
}

function EscalaGUI () {
 
 var n : float = ancho;
 var n1 : float = 0;
 
 n1 = Math.Round(n, 5.0f);
 escala = n1 / 1000.0f;
 //if(log){Debug.Log("Escala = " + escala.ToString());}
 
}

No hay comentarios:

Publicar un comentario