sábado, 1 de junio de 2013

Como crear un menú de armas deslizable con planos en Unity GameEngine - Parte 3





Saludos amigos.

Continuamos con la tercera parte del vídeo de como crear un menú deslizable con unos planos, en este caso, para un menú de armas pero aplicable a cualquier tipo de menú.

En este tercer vídeo, veremos como esta creada la GUI y añadiremos un marco para resaltar el arma seleccionable.
Veremos como incluir un script en cada uno de los planos y como pasar parámetros a ese script.






#pragma strict

//ArmasCNT.js

var texturasArmas : Texture2D [];
var nombreArmas : String [];
static var armaActiva : int;
var espejoArmaActiva : int; // Variable para ver en el inspector "BORRAR"

function Update () {
 
 espejoArmaActiva = armaActiva; // Variable para ver en el inspector "BORRAR"
 
}

#pragma strict

//SliderCNT.js

var prefabPlanoSlider : GameObject;
var CNTslider :GameObject;
var marco :GameObject;
var PosSlider : Vector3;
var CNTarmas :GameObject;
var offsetSlider : float;
private var menuArmas : boolean = false;
private var numTexturas : int;
var texturasArmas : Texture2D [];
var nombreArmas : String [];

var ratioMenu : float = 0.5;
private var nextRatioMenu : float = 0.0;

function Update () {
	
	if(Input.GetKeyDown (KeyCode.M)){
		SwitchMenuArmas ();
	}
	if(Input.GetButton ("Fire1") && Time.time > nextRatioMenu && menuArmas){
		nextRatioMenu = Time.time + ratioMenu;
		RestaPosSlider ();
	}
	if(Input.GetButton ("Fire2") && Time.time > nextRatioMenu && menuArmas){
		nextRatioMenu = Time.time + ratioMenu;
		SumaPosSlider ();
	}
	if(Input.GetButton ("Fire3") && Time.time > nextRatioMenu && menuArmas){
		nextRatioMenu = Time.time + ratioMenu;
		SeleccionaArma ();
	}
	
	if(menuArmas){
		marco.renderer.enabled = true;
	}else{
		marco.renderer.enabled = false;
	}
	CNT ();
	Limites ();
	RecargaMenuArmas ();
	IluminaPlano ();
	
}

function OnGUI () {
	
	if(menuArmas){
	    GUI.BeginGroup (new Rect (Screen.width / 2 - 55,Screen.height - 190,110,80));
			GUI.Box (new Rect (0,0,110,60),"");
	        if (GUI.Button(Rect(0,20,55,20),"-")){
	        	RestaPosSlider ();
	        }
	        if (GUI.Button(Rect(55,20,55,20),"+")){
	        	SumaPosSlider ();
	        }
		 	if (GUI.Button(Rect(0,40,55,20),"<<")){
	        	InicialPosSlider ();
	        }
	        if (GUI.Button(Rect(55,40,55,20),">>")){
	        	FinalPosSlider ();
	        }
		 	if (GUI.Button(Rect(0,60,110,20),"Seleccionar")){
	        	SeleccionaArma ();
	        }
		 	GUI.Box (new Rect (0,0,110,20)," " + nombreArmas[numTexturas]);
		GUI.EndGroup ();
    }

}

function SwitchMenuArmas () {
	
	if(menuArmas){
		menuArmas = false;
		CierraMenuArmas ();
	}else{
		menuArmas = true;
		CreaSliderMenuArmas ();
	}
}

function CNT () {
	
	if(CNTarmas != null){
		var armas : ArmasCNT = CNTarmas.GetComponent("ArmasCNT");
		texturasArmas = armas.texturasArmas;
		nombreArmas = armas.nombreArmas;
	}
	
}

private var objSlidersTexturas : GameObject[];

function CreaSliderMenuArmas () {
	
	objSlidersTexturas = new GameObject[texturasArmas.Length];
	if(menuArmas){
		CNTslider.transform.position.x = 0;
		for(var i : int =0;i < texturasArmas.Length;i++){
			var clon : GameObject = Instantiate (prefabPlanoSlider, 
				Vector3(PosSlider.x+(offsetSlider*i),PosSlider.y,PosSlider.z), 
				Quaternion.Euler (90, 180, 0));
			clon.renderer.material.mainTexture = texturasArmas[i];
			clon.transform.parent = CNTslider.transform;
			objSlidersTexturas[i] = clon;
			clon.name = "Textura"+i;
		}
	}
	
}

function CierraMenuArmas () {
	
	for(var i : int = 0;i < objSlidersTexturas.Length;i++){
		Destroy (objSlidersTexturas[i]);
	}
	CNTslider.transform.position.x = 0;
	
}

function RecargaMenuArmas () {
	
	if(menuArmas && texturasArmas.Length != objSlidersTexturas.Length){
		CierraMenuArmas ();
		CreaSliderMenuArmas ();
	}
	
}

function Limites () {
		
	if (numTexturas < 0){
		numTexturas = 0;
	}
	if (numTexturas > texturasArmas.Length-1){
		numTexturas = texturasArmas.Length-1;
	}
	
}

var colorOriginal : Color = Color.white;
var colorOver : Color = Color.green;

function IluminaPlano () {
	
	if(menuArmas){
		for(var i : int = 0;i < objSlidersTexturas.Length;i++){
			if(objSlidersTexturas[i] == objSlidersTexturas[numTexturas]){
				objSlidersTexturas[i].renderer.material.color = colorOver;
				objSlidersTexturas[i].renderer.material.color.a = 1;
			}else{
				objSlidersTexturas[i].renderer.material.color = colorOriginal;
				objSlidersTexturas[i].renderer.material.color.a = 0.2;
			}
		}
	}
	
}

function RestaPosSlider () {
	
	numTexturas--;
	if(numTexturas >= 0){
		CNTslider.transform.position.x += offsetSlider;
	}
	
}

function SumaPosSlider () {
	
	numTexturas++;
	if(numTexturas <= texturasArmas.Length-1){
		CNTslider.transform.position.x -= offsetSlider;
	}
	
}

function InicialPosSlider () {
	
	numTexturas = 0;
	CNTslider.transform.position.x = 0;
	
}

function FinalPosSlider () {
	
	numTexturas = texturasArmas.Length-1;
	CNTslider.transform.position.x = 0;
	CNTslider.transform.position.x -= (texturasArmas.Length-1)*offsetSlider;
	
}

function SeleccionaArma () {
	
	ArmasCNT.armaActiva = numTexturas;
	
}



No hay comentarios:

Publicar un comentario