Noticias

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

Temas recientes

[PARA QUE NO OS PASE LO QUE A MI] Modificar rectTrasnform mediante script

Iniciado por zelleGames, Abril 26, 2019, 09:41:26 AM

Tema anterior - Siguiente tema
Abril 26, 2019, 09:41:26 AM Ultima modificación: Abril 26, 2019, 09:43:14 AM por zelleGames
Buenas gente,
 
 
 
Ayer estuve habilitando los controles de mi juego de android para "zurdos" o "diestros" lo pongo entre comillas porque mi novia y yo somos ambos diestros pero para ella le era más comodo los controles al otro lado, cuando me lo dijo me toco un poco los huevos porque no tenia pensado esa opción, pero mira he aprendido cosas nuevas, jajaja.
 
 
 
Os dejo el codigo que he usado para mover la posicion de los rectTrasnform y sus anchor:
 

public void RightHand(){
 
        //Se muve rt_BallController a la derecha y su anchor tambien.
   
        rt_BallController.position = new Vector2(-160,160);
        rt_BallController.anchorMin = new Vector2(1, 0);
        rt_BallController.anchorMax = new Vector2(1, 0);
 
 
        //Se  mueve el panel  rt_ActionButtons y el botón rt_JumpButton  a la izquierda y su anchor tambien.
 
        rt_ActionButtons.anchorMin = new Vector2(0, 0);
        rt_ActionButtons.anchorMax = new Vector2(0, 0);
        rt_ActionButtons.position = new Vector2(250, 100);
 
        rt_JumpButton.anchorMin = new Vector2(0, 0);
        rt_JumpButton.anchorMax = new Vector2(0, 0);
 
        rt_JumpButton.position = new Vector2(95, 80);
 
    }


   
public void LeftHand(){
 
        //Se mueve rt_BallController a la izquierda y su anchor tambien.
        rt_BallController.anchorMin = new Vector2(0, 0);
        rt_BallController.anchorMax = new Vector2(0, 0);
       
        rt_BallController.position = new Vector2(160, 160);
 
        //Se  mueve el panel  rt_ActionButtons y el botón rt_JumpButton  a la derecha y su anchor tambien.
        rt_JumpButton.position = new Vector2(-95, 80);
        rt_JumpButton.anchorMin = new Vector2(1, 0);
        rt_JumpButton.anchorMax = new Vector2(1, 0);
 
        rt_ActionButtons.position = new Vector2(-250f, 100f);
        rt_ActionButtons.anchorMin = new Vector2(1, 0);
        rt_ActionButtons.anchorMax = new Vector2(1, 0);
 
    }

 
Este post viene para que no os volvais locos como me paso a mi. Cogí los elementos los movi, anote sus posiciones en cada caso y luego lo introduje en el codigo, hasta ahi parecia todo facil, pero luego resulta que al darle al play movia los elementos a posiciones totalmente distintas de las que habia anotado ?¿?¿?¿
 
Despues de probar y probar resulta que es muy importante el orden en el que introduces el codigo, en algunos casos hay que mover primero los anchor y luego las posiciones y en otros casos al reves primero las psoiciones y luego los anchor. También depende de si un elemento esta dentro de otro, por ejemplo rt_JumpButton esta dentro de rt_ActionsButtons.
 
Sinceramente no acabo de sacar la regla para como posicionar el codigo, lo consegui a base ir probando...si alguien consigue sacarla que lo indique en un comentario.
 
 
 
Espero que a otro le sirva de ayuda y no pierda tiempo como me paso a mi.
 
 
 
Saludos!

Cita de: zelleGames date=1556264486... cuando me lo dijo me toco un poco los huevos
   


Oye tanto detalle no era necesario  ...
 
Cita de: zelleGames date=1556264486Este post viene para que no os volvais locos como me paso a mi. Cogí los elementos los movi, anote sus posiciones en cada caso y luego lo introduje en el codigo, hasta ahi parecia todo facil, pero luego resulta que al darle al play movia los elementos a posiciones totalmente distintas de las que habia anotado ?¿?¿?¿
   
   
      Despues de probar y probar resulta que es muy importante el orden en el que introduces el codigo, en algunos casos hay que mover primero los anchor y luego las posiciones y en otros casos al reves primero las psoiciones y luego los anchor. También depende de si un elemento esta dentro de otro, por ejemplo rt_JumpButton esta dentro de rt_ActionsButtons.
   
   
      Sinceramente no acabo de sacar la regla para como posicionar el codigo, lo consegui a base ir probando...si alguien consigue sacarla que lo indique en un comentario.
   


Algunas cositas:
 


  •    Aunque te haya funcionado puede ser que a otros no, incluso para otro proyecto tuyo, es decir, todo el tema de la UI depende mucho de la resolución, sea Desktop o mobile, por lo que andar poniendo esos valores fijos (Ej: el 160) lo que va a lograr es fijar un comportamiento, cosa que no querés, hablando de UI lo que querés es que sea lo más "adaptativa" posible. Es decir usar bien los anchors (por bien me refiero a que el elemento deba seguir tal o tal esquina, no da igual cualquier anchor) y cada vez que referencias a la pantalla usá Screen.width o height.


  •    El rectTransform toma su posición "útil" (porque es la de referencia) como el anc***dPosition en pixeles respecto a su ancla (de ahí anchor). Fijate que ahí estás usando "position" que segun las referencias es la posición global, es decir que si cambias de modo de renderizado del del canvas no se que va a pasar. En modo overlay no pasa nada, coincide, fijate que se crea un canvas enorme (1 unidad de Unity = 1 pixel del canvas).


  •    Para hacer el truco de la simetría podés hacer algo así (supongo que te referías a cambiar de lado las cosas), los valores están inventados y asumí que los controles deben respetar la esquina.En la imagen el rectangulo es 1 elemento UI:



Cita de: lightbug date=1556323505Oye tanto detalle no era necesario  ...
   


Jajajaj, después de escribirlo pensé que podría sonar raro, sobre todo como no puse la tilde parece que el que me toco los huevos soy yo mientras ella me lo comenta 
 
Volviendo al tema, si me he enterado bien, me indicas que antes de mover el anchor al lado opuesto primero lo pase al centro, después invierta la X y luego mueva el anchor al lado contrario, digamos que lo haga en 3 pasos en vez de en 2 ¿no?  por cierto gracias por currarte los gráficos y todo 
 
 
 
Esta tarde lo pruebo a ver, porque ahora el problema que tengo es que al iniciar la App revisa que preferencia tiene el usuario si esta en la derecha todo bien, pero si tenia de preferencia la izquierda se me va al pedo...se va más lejos, lo raro es que si lo pones a la derecha y luego a la izquierda funciona correctamente, o si lo cambias desde los ajustes del juego también va todo bien , pero directamente si lo cambias de primeras falla ?¿?¿? probare con tu método a ver si funciona correctamente.
 
La ñapa que tengo ahora es que si lo quiere a la izquierda (lado que falla) lo muevo primero a la derecha y luego a la izquierda y funciona bien, pero no me gusta hacer ñapas raras.
 
 
 
 

Etiquetas: