Noticias

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

Problemas movimientos en movil

Iniciado por TOPO, Abril 03, 2016, 12:11:51 AM

Tema anterior - Siguiente tema
Buenas, Estoy haciendo un juego tipo Arkanoid para ir aprendiendo esto de Unity, el problema lo tengo al desplazar la barra en un dispositivo movil. He estado probando diversos códigos encontrados por la red e intentando crearlo yo mismo pero no consigo desplazar correctamente la barra. Quiero que la barra se mueva con el dedo cuando esta sobre esta pero no hay manera, aquí dejo el código que uso para el PC que se mueve con fluidez. A ver si me podéis echar una mano o por lo menos orientar un poco. Gracias por anticipado.     public float speed = 1f;
    Vector2 direction; 
    
    
    // Update is called once per frame
    void FixedUpdate () {
        
        float h = Input.GetAxisRaw ("Horizontal");

        if (h > 0) {
            Vector3 temp = transform.position;
            temp.x += speed * Time.deltaTime;
            transform.position = temp;
        }

        if (h < 0) {
            Vector3 temp = transform.position;
            temp.x -= speed * Time.deltaTime;
            transform.position = temp;
        }    
                
    }


Abril 03, 2016, 12:36:38 AM #2 Ultima modificación: Abril 03, 2016, 12:36:51 AM por TOPO
[quote author=Braltor" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35550" data-ipsquote-contentcommentid="129045 date=1459636458]mirate input.touches[/quote]Ok, hice algunas pruebas con input.touch y no me funciono muy bien, mañana volvere  a intentarlo y veremos. Gracias,

Además busca una función ScreenToWorldPoint, esta función te devuelve el punto del espacio en el que está el dedo, si no has movido la cámara de sitio, puedes obtener el valor de X directamente del vector3 que te devuelve la función y no te costará mucho ajustar bien el movimiento según la distancia entre la barra y la cámara. Suerte!

Esta tarde lo pruebo y os digo que tal. Gracias!!
Esta tarde lo pruebo y os digo que tal. Gracias!!

Por el momento va así la cosa:if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            Vector3 touchPosition = Input.GetTouch(0).position;

            Vector2 worldPoint = Camera.main.ScreenToWorldPoint(touchPosition);

            RaycastHit2D hit = Physics2D.Raycast(worldPoint,Vector2.zero);

            if(hit.collider!=null){

               // movimiento del personaje;
            }


        }
 De esta manera me detecta cuando el dedo toca la barra pero el movimiento no consigo hacerlo, me desaparece la barra de la pantalla. He probado con transform y traslate y nada.

Abril 03, 2016, 08:35:33 PM #6 Ultima modificación: Abril 03, 2016, 08:36:39 PM por Braltor
al llamar screentoworldpoint tienes que asignarle un valor a la coordenada z del parametro, para que tenga la profundidad correcta... ese valor es la distancia de la barra hasta la camarael raycast esta de mas si lo q quieres es poner la barra en el punto q te devuelvey las cosas no desaparecen asi no mas... mira en la ventana de editor donde quedo la barra realmente... eso quiere decir q hay algo mal con el calculo, y seguramente es la profundidad

[quote author=Braltor" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35550" data-ipsquote-contentcommentid="129087 date=1459708533]al llamar screentoworldpoint tienes que asignarle un valor a la coordenada z del parametro, para que tenga la profundidad correcta... ese valor es la distancia de la barra hasta la camarael raycast esta de mas si lo q quieres es poner la barra en el punto q te devuelvey las cosas no desaparecen asi no mas... mira en la ventana de editor donde quedo la barra realmente... eso quiere decir q hay algo mal con el calculo, y seguramente es la profundidad[/quote]Ya me imagino que no desaparecio, se mueve muy rápido y se pierde de la pantalla, seguiré probando para ver como lo hago. Gracias por vuestra ayuda.

Abril 03, 2016, 10:08:43 PM #8 Ultima modificación: Abril 03, 2016, 10:17:49 PM por juanma_teso
Haz la prueba de asignar el valor X del vector WorldPoint directamente al valor X de la posición de la barra.PD: esto solo funcionaría si la cámara está detrás de la barra y las rotaciones están a 0.

[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35550" data-ipsquote-contentcommentid="129090 date=1459714123]Haz la prueba de asignar el valor X del vector WorldPoint directamente al valor X de la posición de la barra.PD: esto solo funcionaría si la cámara está detrás de la barra y las rotaciones están a 0.[/quote]Esta opción la utilice y tampoco me dio resultado, voy a seguir leyendo el api de unity para aprender a utilizar correctamente estas funciones.

Aquí dejo como lo hice al final por si le sirve a alguien: 
        if(Input.touchCount > 0){
            Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.GetTouch (0).position.x, Input.GetTouch (0).position.y, 0));

                                    
            Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.GetTouch (0).position);                
            transform.position = new Vector3 (worldPos.x, transform.position.y, 0);
                    
        }

Etiquetas: