Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Identificar BOX de la GUI

Iniciado por p3dr0h4ck, Diciembre 09, 2015, 11:01:58 PM

Tema anterior - Siguiente tema
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.htmes 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.

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, http://docs.unity3d.com/ScriptReference/GUI.Button.html" rel="external nofollow date=1449754759]http://docs.unity3d.com/ScriptReference/GUI.Button.html , Ya que devuelve un valor boolean cuando se esta presionando pero repito, me refiero a utilizarlo sin clickeo, o tactil, solamente con las teclas. Un saludo

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
    • = 'O';
       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
    • = true;
                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

    Diciembre 10, 2015, 07:06:38 PM #6 Ultima modificación: Diciembre 10, 2015, 07:08:53 PM por jeico008
    Aqui esta mi codigo http://unityspain.com/profile/25390-p3dr0h4ck/?do=hovercard&referrer=http%253A%252F%252Funityspain.com%252Ftopic%252F34664-identificar-box-de-la-gui%252F" title="Go to p3dr0h4ck's profile" id="ips_uid_7" style="box-sizing: border-box; color: inherit; text-decoration: none; background-color: transparent;" href="<___base_url___>/profile/25390-p3dr0h4ck/">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;
    }
    }
     

    Diciembre 10, 2015, 08:04:19 PM #7 Ultima modificación: Diciembre 10, 2015, 08:06:58 PM por p3dr0h4ck
     [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 http://unityspain.com/profile/25390-p3dr0h4ck/?do=hovercard&referrer=http%253A%252F%252Funityspain.com%252Ftopic%252F34664-identificar-box-de-la-gui%252F" title="Go to p3dr0h4ck's profile" id="ips_uid_7" style="box-sizing: border-box; color: inherit; text-decoration: none; background-color: transparent;" href="<___base_url___>/profile/25390-p3dr0h4ck/">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), "");
          }
       }


    }
     


    Etiquetas: