Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: brok en Diciembre 13, 2015, 02:24:46 PM

Título: movimiento IA
Publicado por: brok en Diciembre 13, 2015, 02:24:46 PM
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;
    }
 
Título: movimiento IA
Publicado por: Antonio en Diciembre 13, 2015, 04:16:22 PM
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. 
Título: movimiento IA
Publicado por: brok en Diciembre 13, 2015, 04:28:47 PM
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. 
Título: movimiento IA
Publicado por: brok en Diciembre 13, 2015, 06:59:21 PM
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;

            }

       

    }