Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: brok en Diciembre 18, 2015, 01:02:16 AM

Título: rigidbody vs rigidbody
Publicado por: brok en Diciembre 18, 2015, 01:02:16 AM
Hola, mi problema es que el player empuja al enemigo y lo arrastra y yo quiero que se pare solo se mueva cuando lo golpee no cuando colisione con el, no se si me explicado bien.
using UnityEngine;
using System.Collections;

public class PlayerAI : MonoBehaviour
{

   
    private Animator ani;
    float distancia = 1.5f;
    float distanciaS = 1.0f;
    public SphereCollider colisionplayerPunoDe;
    public SphereCollider colisionplayerPataDe;
    public SphereCollider colisionplayerPunoIz;
    public SphereCollider colisionplayerPataIz;
    Transform target;
    Rigidbody rigidBody;
    vidaPlayer vidaplayer;
    private vidaAI VidaAI;
    private object enemigo;

    void Awake()
    {
        colisionplayerPunoDe.isTrigger = false;
        colisionplayerPunoIz.isTrigger = false;
        colisionplayerPataDe.isTrigger = false;
        colisionplayerPataIz.isTrigger = false;
    }
    void Start()
    {
        rigidBody = GetComponent<Rigidbody>();
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        vidaplayer = GameObject.FindGameObjectWithTag("Player").GetComponent<vidaPlayer>();
        VidaAI = GetComponent<vidaAI>();
        ani = GetComponent<Animator>();
       
       
    }


    void FixedUpdate()
    {
       
        StartCoroutine(Corrutinas());
    }
   
    IEnumerator Corrutinas()
    {


        if (vidaplayer.vida <= 0)
        {

            StopAllCoroutines();
            ani.SetFloat("andar", 0f);
            ani.SetBool("golpe", false);
            ani.SetInteger("estado", 0);
            yield return new WaitForSeconds(8.0f);
        }
        if (VidaAI.vida_Ai <= 0)

        {
            StopAllCoroutines();
           
            ani.SetFloat("andar", 0f);
            ani.SetBool("golpe", false);
            ani.SetInteger("estado", 0);
            ani.SetTrigger("muerteEnemigo");
            yield return new WaitForSeconds(8.0f);
        }
        else
        {
            StartCoroutine(Golpes());
            StartCoroutine(Movimientos());
           
        }
       
    }
    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;

            }

       

    }







    public IEnumerator Golpes()
    {
        yield return null;
        patada1();
        yield return new WaitForSeconds(2.0f);
        patada2();
        yield return new WaitForSeconds(4.0f);
        puno1();
        yield return new WaitForSeconds(6.0f);
        puno2();
        yield return new WaitForSeconds(8.0f);

    }

    void patada1()
    {


        if (Vector3.Distance(transform.position, target.position) >= distanciaS)
        {
            ani.SetInteger("estado", 1);

            colisionplayerPataIz.isTrigger = true;
            if (Vector3.Distance(transform.position, target.position) <= distancia)
            {
                ani.SetFloat("andar", 0.0f);
               
               
            }
        }
       
       else
       {
                colisionplayerPataIz.isTrigger = false;
                colisionplayerPunoDe.isTrigger = false;
                colisionplayerPunoIz.isTrigger = false;
                colisionplayerPataDe.isTrigger = false;
               
       }
       
           

       

    }
   void patada2()
    {

        if (Vector3.Distance(transform.position, target.position) >= distanciaS)
        {
            ani.SetInteger("estado", 2);
           
            colisionplayerPataDe.isTrigger = true;
            if (Vector3.Distance(transform.position, target.position) <= distancia)
            {
                ani.SetFloat("andar", 0.0f);
               
               
            }
        }
        else
        {
            colisionplayerPataDe.isTrigger = false;
            colisionplayerPunoDe.isTrigger = false;
            colisionplayerPunoIz.isTrigger = false;
            colisionplayerPataIz.isTrigger = false;
        }





    }

   void puno1()
    {


        if (Vector3.Distance(transform.position, target.position) >= distanciaS)
        {
            ani.SetInteger("estado", 3);
           
            colisionplayerPunoDe.isTrigger = true;
            colisionplayerPunoIz.isTrigger = true;
            if (Vector3.Distance(transform.position, target.position) <= distancia)
            {
                ani.SetFloat("andar", 0.0f);
               
            }  
        }
        else
        {
                colisionplayerPunoDe.isTrigger = false;
                colisionplayerPunoIz.isTrigger = false;
                colisionplayerPataDe.isTrigger = false;
                colisionplayerPataIz.isTrigger = false;
        }

    }
   void puno2()
    {

        if (Vector3.Distance(transform.position, target.position) >= distanciaS)
        {
            ani.SetInteger("estado", 4);
           
            colisionplayerPunoDe.isTrigger = true;
            if (Vector3.Distance(transform.position, target.position) <= distancia)
            {
                ani.SetFloat("andar", 0.0f);
               
               
            }
        }

        else
        {
            colisionplayerPunoDe.isTrigger = false;
            colisionplayerPunoIz.isTrigger = false;
            colisionplayerPataDe.isTrigger = false;
            colisionplayerPataIz.isTrigger = false;
        }


    }

   
   
}
 
Título: rigidbody vs rigidbody
Publicado por: ftejada en Diciembre 18, 2015, 03:29:47 PM
Hola que tal!!La verdad es que no entiendo a qué te refieres. ¿Puedes explicarlo mejor? Saludos
Título: rigidbody vs rigidbody
Publicado por: kaito en Diciembre 18, 2015, 05:38:01 PM
Aplica is kinematic para que no le afecten las fisicas.
Título: rigidbody vs rigidbody
Publicado por: brok en Diciembre 18, 2015, 06:00:33 PM
Cita de: kaito date=1450456681" data-ipsquote="" data-cite="kaito" class="ipsQuoteSi aplico kinematic no funciona las fisicas y el enemigo se mueve por fisica se queda quieto. 
Ya lo he conseguido pero me falta que el enemigo se desactive cuando el personaje lo golpee
Le quito la vida del tiron con unos pocos de puñetazos de todas formas gracias.