Noticias

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

movimiento IA

Iniciado por brok, Diciembre 13, 2015, 02:24:46 PM

Tema anterior - Siguiente tema
Hola, mi script utilizo rigidbody, pero cuando el enemigo voltea al personaje, va su posicion a la inversa no sigue al personaje se aleja,¿ como podria cambiar eso ?.
 IEnumerator Movimientos()
    {
       
        if (distancia > distanciaS)
        {
            transform.LookAt(target);

        }


        if (Vector3.Distance(transform.position, target.position) >= distancia)
        {
            ani.SetFloat("andar", 1.0f);
            rigidBody.velocity = new Vector3 (0,0,-1.5f);

           
        }
        else
        {
            ani.SetFloat("andar", -1.0f);
            rigidBody.velocity = new Vector3(0, 0, 1.5f);
            colisionplayerPunoDe.isTrigger = false;
            colisionplayerPunoIz.isTrigger = false;
            colisionplayerPataDe.isTrigger = false;
            colisionplayerPataIz.isTrigger = false;
        }
        yield return null;
    }
 

Diciembre 13, 2015, 04:16:22 PM #1 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Cuando la distancia real es mayor que la distancia que tienes guardada, el enemigo comienza a andar a una velocidad Z negativa, eso lo que hace es que efectivamente, vaya hacia atrás. 

Luego pones que si la Distancia real es menor que la distancia que tienes guardada, el enemigo camina, pero la transición de la animación se hace a la inversa. No sé si eso es lo que querías, pero bueno, viendo que la animación va desde "andar" hacia "andar" ahí no hay transición, luego no debería notarse nada. 

Cita de: Adngel date=1450019782" data-ipsquote="" data-cite="Adngel" class="ipsQuoteCuando la distancia real es mayor que la distancia que tienes guardada, el enemigo comienza a andar a una velocidad Z negativa, eso lo que hace es que efectivamente, vaya hacia atrás. 

Luego pones que si la Distancia real es menor que la distancia que tienes guardada, el enemigo camina, pero la transición de la animación se hace a la inversa. No sé si eso es lo que querías, pero bueno, viendo que la animación va desde "andar" hacia "andar" ahí no hay transición, luego no debería notarse nada. 
¿Como hago lo que me explicas de donde saco la distancia que tengo guargada?
La animación andar es un blendTree, con dos animaciones,  -1 una animación, 1 animación dos, necesito que valla a la inversa rigidbody cunado se active la animación de atrás para que valla hacia el personaje y no se aleje. 

Ya lo resolvido y lo endedido dejo codigo por si alguien le sirve.
IEnumerator Movimientos()
    {
       
        if (distancia > distanciaS)
        {
            transform.LookAt(target);

        }
       
            Vector3 EnemigoV = new Vector3(0, 0, 2.0f);
            EnemigoV = target.position - transform.position;
            if (Vector3.Distance(transform.position, target.position) >= distancia)
            {
                ani.SetFloat("andar", 1.0f);
               
                rigidBody.velocity = EnemigoV;
               
           }



        yield return new WaitForSeconds(3f);

            if (Vector3.Distance(transform.position, target.position) <= distanciaS)
            {
                ani.SetFloat("andar", -1.0f);

                rigidBody.velocity = -EnemigoV;

            }

       

    }
 

Etiquetas: