Buenos días.
Como siempre que acudo aquí, es cuando la situación ya roza el absurdo y no logro salir del atolladero. Os cuento ...
Me interesa un botón para el GUI, pero este debe de "activarse" cuando lo tocas, no cuando lo sueltas. En el momento de iniciar el contacto en lugar de cuando levantas el dedo.
Hasta ahora, usaba el GUI.RepeatButton, que supeustamente devuelve un valor True mientras lo mantengas presionado. Pero desde hace cuatro días ya no funciona. Y no me preguntéis porque, pero desde el jueves el GUI.RepeatButton se comporta como un GUI.Button normal.
Tampoco funciona el comprobar el las coordenadas del touch con un GUILayoutUtility.GetPastRect().Contains. Ni siquiera funciona si hago los cálculos a mano.
¿ Alguno conoce otra alternativa para probar ?
Gracias.
Hola Quel,
No te puedo dar una respuesta a eso, porque nunca utilizo GUI.Button. Yo suelo utilizar Cubos (o cualquier modelo) o Sprites con Colliders y Tags para hacer botones. Los detecto con un Ray, y ya con las touchPhases, sabes si esta tocando, terminando, etc...
Siempre lo he realizado así y nunca he tenido problemas, quizá el GUI.Button es más cómodo y rápido, ya que con 1 comando ya tienes el botón colocado y en marcha, pero creo que de la forma que lo hago yo, tienes más control sobre lo que quieres hacer.
Saludos.
No me gusta la idea de usar cubos, porque son elementos del GUI que deben permanecer siempre por "encima" del mapa. Ademas, cambiar ahora los GUIs por cubos implicaría volver a reescribir mucho mas de lo que deseo.
Al final he logrado hacerlo funcionar. De forma un poco guarra, pero parece que funciona. Ya veremos si no vuelve a estropearse por si solo.
Básicamente ahora solo dibujo un Label, y despues controlo si se esta tocando la pantalla y si las coordenadas del touch están dentro las coordenadas del Label. Peto sin usar un Contain, ya que el programa no es capaz de calcularlo correctamente.
[code type=css]GUILayout.Label("+", GUI.skin.GetStyle("ButtonHP+"));
if(Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
{
if (Event.current.type.Equals(EventType.Repaint))
{
if(new Rect(tokenPanelRect.x + GUILayoutUtility.GetLastRect().x,
tokenPanelRect.y + GUILayoutUtility.GetLastRect().y,
GUILayoutUtility.GetLastRect().width,
GUILayoutUtility.GetLastRect().height).Contains(new Vector2(Input.GetTouch(0).position.x,
Screen.height - Input.GetTouch(0).position.y)))
StartCoroutine( "AddHitPoints" );
}
}
Me j***** un poco ese código porque es innecesariamente complejo. Pero es la única alternativa al ButtonRepeat que he encontrado.
Qué es tokenPanelRect?
Gracias!
Qué es tokenPanelRect?[/quote]
Oh!, perdón. tokenPanelRect es una variable interna mía, de tipo Rect y que almacena las coordenadas y el tamaño de la GUI.Window para el TokenPanel.
Es que en mi ejemplo, el botón a tocar esta dentro de una GUI.Window, y el GetLastRect() te da una posición relativa, no absoluta. Tienes que añadirle la posición de la GUI.Window en la que se encuentra para lograr la posición absoluta de ese botón y poder compararlo con las coordenadas del Touch.
¿ Se entiende mas o menos ?
Sí, muchas gracias, a ver si consigo que funcione como debe porque detesto los juegos con sticks cuando lo que hacen es un movimiento "digital".
[quote author=BitEver" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="3467" data-ipsquote-contentcommentid="18794 date=1332096096]Hola Quel, No te puedo dar una respuesta a eso, porque nunca utilizo GUI.Button. Yo suelo utilizar Cubos (o cualquier modelo) o Sprites con Colliders y Tags para hacer botones. Los detecto con un Ray, y ya con las touchPhases, sabes si esta tocando, terminando, etc... Siempre lo he realizado así y nunca he tenido problemas, quizá el GUI.Button es más cómodo y rápido, ya que con 1 comando ya tienes el botón colocado y en marcha, pero creo que de la forma que lo hago yo, tienes más control sobre lo que quieres hacer. Saludos.[/quote]Hola BitEver, he estado intentando implementar botones con cubos pero aun tengo algunas dificultades y por lo que leo en tu comentario creo que me podrías ayudar. Intento utilizar el Ray y el touchPhases pero no logro construirlo bien, espero me puedas colaborar diciéndome como es la forma adecuada de implementarlos. muchas gracias.
Creo que se casó, luego tuvo 3 hijos, se divorció y ahora vive con una comunidad de vendedores de vasos de plástico en el Nepal. Si quieres le dejo un recado.
Blueice9612, estte es un mensaje de hace 3 años y medio. La duda que planteaba en su momento, ni siquiera es compatible con el Unity actual.PD: Que pimpollo me he visto a leer mi propia duda de hace tanto tiempo atrás.