Noticias

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

Temas recientes

Cambiar la rotación de un objeto(una flecha) para que apunte a su destino

Iniciado por Mcloud, Marzo 01, 2019, 01:51:32 PM

Tema anterior - Siguiente tema
Muy buenas, 
 
Estoy con un RPG en 2D,  estoy haciendo un enemigo arquero, tengo la imagen de la flecha, la instancio correctamente y va a su destino sin problema, o bueno, casi sin problema, porque claro la imagen es fija, una flecha en horizontal, y este donde este el objetivo la flecha va en horizontal....
 
He pensado que cambiando la rotación puedo hacer que apunte al destino, tengo este código( de momento solo pruebo con el disparo hacia abajo para ver si va bien)
 

void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player");
        rb2d = GetComponent<Rigidbody2D>();
        // Recuperamos posición del jugador y la dirección normalizada
        if (player != null)
        {
            target = player.transform.position;
            dir = (target - transform.position).normalized;
            Debug.Log("X "+dir.x);
            Debug.Log("Y " + dir.y);            
            Vector3 rotacion = DameRotacionFlecha();
            transform.Rotate(rotacion, 50f);
        }
    }
    private Vector3 DameRotacionFlecha()
    {
        Vector3 rotacion;
        float derecha = 0;
        float izquierda = 180;
        float arriba = 90;
        float abajo = -90;
        float diagAbjDcha = -45;
        float diagArrDcha = 45;
        float diagAbjIzq = -135;
        float diagArrIzq = 135;      
        if (dir.y < 0)
        {//abajo
            if (dir.x < 0)
            {//izquierda                
                if (dir.x > -0.85)
                {
                    rotacion = new Vector3(0, 0, diagAbjIzq);
                }
                else
                {
                    rotacion = new Vector3(0, 0, izquierda);
                }
            }
            else
            {//derecha
                if (dir.x < 0.85)
                {
                    rotacion = new Vector3(0, 0, diagAbjDcha);
                }
                else
                {
                    rotacion = new Vector3(0, 0, derecha);
                }
            }
        }
        else
        {//arriba
            if (dir.x < 0)
            {//izquierda
                rotacion = new Vector3(0, 0, diagArrIzq);
            }
            else
            {//derecha
                rotacion = new Vector3(0, 0, diagArrDcha);
            }
        }
        return rotacion;
    }
    void FixedUpdate()
    {        
        if (target != Vector3.zero)
        {
            speed = 5;
            rb2d.MovePosition(transform.position + (dir * Speed) * Time.deltaTime);
        }
    }

 
El caso es que cuando estoy por debajo de el y a la derecha va bien, pero si me cruzo a la izquierda nada....me pone otro valor en la "z" que no corresponde con lo que le asigno...igual no es la forma correcta de hacer que la flecha mire a su destino y me estoy complicando mucho cuando es mas sencillo...
 
Gracias de antemano
 
Un saludo

No sé si entendí lo que quieres, ¿que la flecha apunte a un objetivo? utiliza transform.LookAt();

Cita de: leocub58 date=1551456348No sé si entendí lo que quieres, ¿que la flecha apunte a un objetivo? utiliza transform.LookAt();
   


Muchas gracias! si basicamente es eso, como la imagen es una flecha normal en horizontal, la tire donde la tire va en horizontal....en cuanto llegue a casa lo pruebo que no conocia esa funcion! gracias!!!

Una mínimo tip, hacé lo del lookAt a un objeto vacío de referencia (o a un quaternion, mejor, si estás canchero) y a la verdadera rotación (la de la flecha supongo) hacele un Slerp entre la rotación de la flecha y la del objeto de referencia, así podés darle un poco de dinamismo a la flecha.

buenas, 
 
He probado el LookAt, pero no me va, me añade rotación en X y en Y, con lo que el objeto se hace invisible practicamente
 
Para poner mas en contexto, a mi me sale la flecha así
 

 
y quisiera que saliera asi
 

 
el objeto de la flecha tiene el sprite como en la primera imagen, así en horizontal, lo único que he visto para girarlo es añadiendo valor a la Z de la rotación, pero LookAt no me lo hace.
 
En la funcion donde saco la rotacion cambia a Quaternion, lo asignaba con transform.rotation, tampoco me iba bien y por eso cambie a transform.Rotate y al Vector3
 
Gracias!!
 
 
 
 

Buenas, 
 
Disculpad que no he podido escribir antes, lo he solucionado, en vez de la rotación modifico los eulerAngles, con eso la flecha apunta donde quiero, el problema parece que estaba en los grados de giro, que Rotation los coge de una manera y eulerAngles de otra, que esra la que yo necesitaba
 
gracias!!

Etiquetas: