Buenas estoy probando a tener un pequeño inventario/menú con 5 elementos diferentes el caso es que el método GUI.Box http://docs.unity3d.com/ScriptReference/GUI.Box.htm (http://docs.unity3d.com/ScriptReference/GUI.Box.html)es un método de tipo void y por lo cual no me devuelve nada, y me gustaría mani***r este menú mediante las teclas, es decir algo parecido a esto:-Ver imagen. Mi idea es que pudiera acceder a estas distintas cajas mediante un array, pero lo dicho, como no devuelve nada no se como acceder a ello, ¿alguien tiene alguna idea, o ha tenido una situación parecida?Un saludo y gracias.
(//<fileStore.core_Attachment>/monthly_2015_12/ejemplo.png.7c965933ad0205a70b518c9da650d9a4.png)
Creo que te sería más sencillo hacerlo con la UI, e incluso con Event Triggers puedes hacerlo con menos programacion y con clicks.
tambien puedes hacerlo con botones y despues de dibujar los botones dibujas encima el cuadro blanco o rojolo de mas es la variable seleccion para dibujar que cuadro se dibujara
[quote author=jeico008" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34664" data-ipsquote-contentcommentid="124848">tambien puedes hacerlo con botones y despues de dibujar los botones dibujas encima el cuadro blanco o rojolo de mas es la variable seleccion para dibujar que cuadro se dibujara[/quote]De esa forma es cierto que podría saber cual esta seleccionado,
Título: Identificar BOX de la GUI
Publicado por: Caesar en Diciembre 10, 2015, 04:42:24 PM
Claro, antes que saliera la version 4.6 todo era con las GUI y ese tipo de cosas eran frecuentes; para responderte una forma podria ser crear una variable (int por ejemplo), y controlar esta en el Update () para que aumente en 1 o disminuya en 1 segun corresponda, al presionar la tecla que le asignes, luego con "if" en OnGUI () por cada valor muestras la box en la posicion que deseas.Espero te sirva
[quote author=Caesar" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34664" data-ipsquote-contentcommentid="124855">Claro, antes que saliera la version 4.6 todo era con las GUI y ese tipo de cosas eran frecuentes; para responderte una forma podria ser crear una variable (int por ejemplo), y controlar esta en el Update () para que aumente en 1 o disminuya en 1 segun corresponda, al presionar la tecla que le asignes, luego con "if" en OnGUI () por cada valor muestras la box en la posicion que deseas.Espero te sirva[/quote]Podría ser una opción, ya que en OnGUI se esta redibuja constantemente el código que existe por lo cual en referencía a lo que usted dice el codigo quedaria de la sigiente forma más o menos:
= true; posiciones [1] = false;
posiciones [2] = false;
//El 0 lo utilizamos para representar el que esta marcado, como vemos corresponde con la posicion
//en posiciones - true
letras
letras [1] = 'X';
letras [2] = 'X';
}
void Update ()
{
//Si pulsamos "A" vamos hacia atras, y si estamos en el primero al ultimo
if (Input.GetKeyUp (KeyCode.A)) {
//El bucle debera cerrarse en caso de realizarse un cambio
bool cierreBucle=false;
for (int i=0; i<posiciones.Length && !cierreBucle; i++) {
//Se ejecutara cuando estemos en el selecionado y no sea el primero, si no se produciria
//un error debido a que lo pasariamos al posiciones[-1] que no existe
if (posiciones
&& i != 0) {
posiciones = false;
posiciones [i - 1] = true;
cierreBucle=true;
print ("Pasamos del: " + i + " - " + posiciones + " al " + (i - 1) + " - " + posiciones [i - 1]);
//Si es el primero este se vuelve a false y true el ultimo
} else if (posiciones && i == 0) {
posiciones = false;
posiciones [posiciones.Length - 1] = true;
cierreBucle=true;
print ("Pasamos del: " + i + " - " + posiciones + " al " + (posiciones.Length - 1) + " - " + posiciones [posiciones.Length - 1]);
}
}
//Si pulsamos "D" vamos hacia adelante, y si estamos en el ultimo al primero
} else if (Input.GetKeyUp (KeyCode.D)) {
//El bucle debera cerrarse en caso de realizarse un cambio
bool cierreBucle=false;
for (int i=0; i<posiciones.Length && !cierreBucle; i++) {
//Se ejecutara cuando estemos en el selecionado y no sea el ultimo, si no se produciria
//un error debido a que lo pasariamos al posiciones[3] que no existe
if (posiciones && i != (posiciones.Length - 1)) {
posiciones = false;
posiciones [i + 1] = true;
cierreBucle=true;
print ("Pasamos del: " + i + " - " + posiciones + " al " + (i + 1) + " - " + posiciones [i + 1]);
//Si es el ultimo este se vuelve a false y true el primero
} else if (posiciones && i == (posiciones.Length - 1)) {
posiciones = false;
posiciones cierreBucle=true;
print ("Pasamos del: " + i + " - " + posiciones + " al 0 " + posiciones }
}
}
}
void OnGUI ()
{
for (int i=0; i<posiciones.Length; i++) {
//vamos igualando donde la posicion sea true añadimos el el elemento letra que
//sea igual a "O"
if(posiciones){
letras='O';
}else{
letras='X';
}
}
//Podriamos automatizarlo pero de esta manera es mas rapida para una simple prueba
GUI.Button (new Rect (10, 10, 100, 50), "Opc: "+letras[0]);
GUI.Button (new Rect (110, 10, 100, 50), "Opc: "+letras[1]);
GUI.Button (new Rect (210, 10, 100, 50), "Opc: "+letras[2]);
}
} Con este ejemplo conseguimos lo que se ve en la imagen, si ha alguien se le ocurre otra forma, agradecería que la compartiera. Un saludo y gracias
(//<fileStore.core_Attachment>/monthly_2015_12/Captura.PNG.9f4a717b20d2e33f39250da7cd184ca7.PNG)
Aqui esta mi codigo
p3dr0h4ck en update esta el codigo si quieres moverlo por teclado con A y S y enter para hacer algo si quieres y en OnGUI es para seleccionarlo por el raton
var posicion : int = 0;
var rojo : Texture2D;
var blanco : Texture2D;
var recu : Rect = Rect(20,20,70,70);
function Update () {
//MOVIENDO Y SELECCIONANDO POR TECLADO
if (posicion > 0 && Input.GetKeyUp (KeyCode.A))
posicion--;
if (posicion < 4 && Input.GetKeyUp (KeyCode.D))
posicion++;
if (Input.GetKeyUp (KeyCode.Return)){
Debug.Log("ENTER EN "+posicion);///////////////////////////////////////////
}
}
function OnGUI() {
recu.x = 20;
for (var i : int =0; i < 5; i++){
//////LO QUE PASA AL PRESIONAR A CON EL RATON
if (GUI.Button(recu, "No."+i)){
posicion = i;
Debug.Log("SE SELECCIONO "+posicion);///////////////////////////////////////////
}
if (i != posicion)
GUI.DrawTexture(recu, blanco);
else
GUI.DrawTexture(recu, rojo);
recu.x +=70+10;
}
}
[quote author=jeico008" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34664" data-ipsquote-contentcommentid="124869">Aqui esta mi codigo
p3dr0h4ck en update esta el codigo si quieres moverlo por teclado con A y S y enter para hacer algo si quieres y en OnGUI es para seleccionarlo por el raton
var posicion : int = 0;var rojo : Texture2D;
var blanco : Texture2D;
var recu : Rect = Rect(20,20,70,70);
function Update () {
//MOVIENDO Y SELECCIONANDO POR TECLADO
if (posicion > 0 && Input.GetKeyUp (KeyCode.A))
posicion--;
if (posicion < 4 && Input.GetKeyUp (KeyCode.D))
posicion++;
if (Input.GetKeyUp (KeyCode.Return)){
Debug.Log("ENTER EN "+posicion);///////////////////////////////////////////
}
}
function OnGUI() {
recu.x = 20;
for (var i : int =0; i < 5; i++){
//////LO QUE PASA AL PRESIONAR A CON EL RATON
if (GUI.Button(recu, "No."+i)){
posicion = i;
Debug.Log("SE SELECCIONO "+posicion);///////////////////////////////////////////
}
if (i != posicion)
GUI.DrawTexture(recu, blanco);
else
GUI.DrawTexture(recu, rojo);
recu.x +=70+10;
}
}
[/quote]Gracias espero que esto ayude a más gente
Prueba este script tambien es una opcion.
public class Inventario : MonoBehaviour {
int seleccionado;
void Update () {
if (Input.GetKeyDown (KeyCode.A))
{
seleccionado--;
}
if (Input.GetKeyDown (KeyCode.D))
{
seleccionado++;
}
if (seleccionado > 4)
seleccionado = 0;
else if (seleccionado < 0)
seleccionado = 4;
}
void OnGUI ()
{
int numeroBox = 5;
for (int contador = 0; contador < numeroBox; contador++)
{
if (seleccionado != contador)
{
GUI.Box (new Rect (100 + 50 * contador,100,30,30), "");
}
else
{
GUI.Box (new Rect (100 + 50 * seleccionado - 5,100 - 5,40,40), "");
}
}
}
Omg.... El ongui....