Noticias

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

Cojiendo componente Animator

Iniciado por brok, Diciembre 01, 2015, 10:07:20 PM

Tema anterior - Siguiente tema
Como puedo cojer elcomponente Animator del player para colisionPlayerAi lo he echo de este modo.
using UnityEngine;
using System.Collections;


public class ColisionPlayerAI : MonoBehaviour
{
    public Animator Anim;
    AudioSource GolpeSonido;
    RaycastHit GolpeHit;
    public ParticleSystem particulas;

    void Start()
    {
       
        GolpeSonido = GetComponentInParent<AudioSource>();
       
    }
   
       
   
    void OnTriggerEnter(Collider colision)
    {
       

        if (colision.gameObject.CompareTag("Player"))
           
        {
           
                vidaPlayer vidaplayer= colision.gameObject.GetComponent<vidaPlayer>();
               
                vidaplayer.QuitarVidaPlayer(0.5f, GolpeHit.point);
                GolpeSonido.Play();
                Anim.SetBool("dano", true);
                Player.damaged = true;
                particulas.transform.position = GolpeHit.point;
                particulas.Play();
        }
        else

        {
           
            Player.damaged = false;
            GolpeSonido.Stop();
            Anim.SetBool("dano", false);
        }


    }
el problema es que lo asingo al inspecto el player al script colisionPlayerAi va bien hasta que sale un error de como si no estubiera asisgnado y se quita de su asignacion en el inspector, ¿como puedo hacerlo?

Diciembre 01, 2015, 10:44:35 PM #1 Ultima modificación: Diciembre 01, 2015, 11:03:20 PM por brok
lo he solucionado a sin pero ahora solo me ejecuta el player solo la animacion de daño y algunas veces las animaciones de golpear del AI.
using UnityEngine;
using System.Collections;

public class ColisionPlayer : MonoBehaviour
{
    AudioSource GolpeSonido;
    public ParticleSystem particulas;
    Player player;
    RaycastHit GolpeHit;
    Animator Anim;

    void Start()
    {

        GolpeSonido = GetComponentInParent<AudioSource>();
        player = GetComponentInParent<Player>();
        Anim = GameObject.FindGameObjectWithTag("Enemigo").GetComponent<Animator>();

    }


    void OnTriggerEnter(Collider colision)
    {
       

        if (colision.gameObject.CompareTag("Enemigo"))

        {
            vidaAI vidaAi = colision.GetComponent<vidaAI>();

            if (vidaAi != null)
                vidaAi.QuitarVIdaAI(10, GolpeHit.point);
                GolpeSonido.Play();
                Player.damaged = true;
                Anim.SetFloat("danoEnemigo", 1f);
                particulas.transform.position = GolpeHit.point;
                particulas.Play();
                StartCoroutine(SliderEnemigoTrue());


        }
        else
        {
           // if(Anim != null)
            GolpeSonido.Stop();
            Player.damaged = false;
            Anim.SetFloat("danoEnemigo", 0f);
        }

    }


    IEnumerator SliderEnemigoTrue()
    {

        yield return new WaitForSeconds(0.0f);
        player.sliderAI.gameObject.SetActive(true);
        yield return new WaitForSeconds(3f);
        player.sliderAI.gameObject.SetActive(false);
       
        yield return null;
       
    }


}
 Lo pongo asin y el AI no suigue al player se queda donde inicio el player todos loso IA.
using UnityEngine;
using System.Collections;


public class ColisionPlayerAI : MonoBehaviour
{
    Animator Anim;
    AudioSource GolpeSonido;
    RaycastHit GolpeHit;
    public ParticleSystem particulas;

    void Start()
    {
       
        GolpeSonido = GetComponentInParent<AudioSource>();
        Anim = GameObject.FindGameObjectWithTag("Player").GetComponent<Animator>();


    }
   
       
   
    void OnTriggerEnter(Collider colision)
    {
       

        if (colision.gameObject.CompareTag("Player"))
           
        {
           
                vidaPlayer vidaplayer= colision.gameObject.GetComponent<vidaPlayer>();
            if (vidaplayer != null)
                vidaplayer.QuitarVidaPlayer(0.5f, GolpeHit.point);
                GolpeSonido.Play();
                Anim.SetBool("dano", true);
                Player.damaged = true;
                particulas.transform.position = GolpeHit.point;
                particulas.Play();
        }
        else

        {
            //if (Anim != null)
            Player.damaged = false;
            GolpeSonido.Stop();
            Anim.SetBool("dano", false);
        }


    }
y esto es script de AI.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

[RequireComponent(typeof(NavMeshAgent))]
public class Player_ai : MonoBehaviour
{
   
    Transform Target;
    NavMeshAgent Agent;
    Animator Anim;
    public float Speed = 1.0f;
    public float Rango;
    public float distanciaS = 1.0f;
    public float distanciaP = 2.0f;
    public float sinkSpeed = 2.5f;
    public SphereCollider colisionPunoIzq;
    public SphereCollider colisionPunoDer;

    void Start()
    {
       

        Target = GameObject.FindGameObjectWithTag("Player").transform;
       
        Anim = GetComponent<Animator>();
        Agent = GetComponent<NavMeshAgent>();
       
        colisionPunoIzq.isTrigger = false;
        colisionPunoDer.isTrigger = false;
       


}
   
    void Update()
    {




        if (vidaPlayer.vida > 0)
        {

            Agent.SetDestination(Target.position);
           
            StartCoroutine(idle());
        }
        else
        {
            Agent.enabled = false;
           
        }

       


    }
    IEnumerator idle()
    {

        yield return new WaitForSeconds(1f);

        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("idle", 0.0f);
           
            colisionPunoIzq.isTrigger = false;
            colisionPunoDer.isTrigger = false;
           
            if (Vector3.Distance(transform.position, Target.position) <= distanciaP)
            {
                Anim.SetFloat("idle", 1.0f);
               
                colisionPunoIzq.isTrigger = false;
                colisionPunoDer.isTrigger = false;
               
                StartCoroutine(Gope1());
                StartCoroutine(Gope2());
            }

        }

        yield return null;
    }
    IEnumerator Gope1()
    {

        yield return new WaitForSeconds(2f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("golpe1", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPunoDer.isTrigger = true;

            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("golpe1", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPunoDer.isTrigger = false;


            }

        }

        yield return null;

    }
    IEnumerator Gope2()
    {

        yield return new WaitForSeconds(4f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("golpe1", 0.0f);
            Anim.SetFloat("golpe2", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPunoIzq.isTrigger = true;
            colisionPunoDer.isTrigger = true;
            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("golpe1", 0.0f);
                Anim.SetFloat("golpe2", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPunoIzq.isTrigger = false;
                colisionPunoDer.isTrigger = false;

            }

        }

        yield return null;

    }

}
 

Cuando me cargo al enemigo me sale este error.MissingReferenceException: The object of type 'Animator' has been destro*** but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
using UnityEngine;
using System.Collections;

public class ColisionPlayer : MonoBehaviour
{
    AudioSource GolpeSonido;
    public ParticleSystem particulas;
    Player player;
    RaycastHit GolpeHit;
    Animator Anim;

    void Start()
    {

        GolpeSonido = GetComponentInParent<AudioSource>();
        player = GetComponentInParent<Player>();
        Anim = GameObject.FindGameObjectWithTag("Enemigo").GetComponent<Animator>();

    }


    void OnTriggerEnter(Collider colision)
    {
       

        if (colision.gameObject.CompareTag("Enemigo"))

        {
            vidaAI vidaAi = colision.GetComponent<vidaAI>();

            if (vidaAi != null)
                vidaAi.QuitarVIdaAI(10, GolpeHit.point);
                GolpeSonido.Play();
                Player.damaged = true;
                Anim.SetBool("danoEnemigo",true);
                particulas.transform.position = GolpeHit.point;
                particulas.Play();
                StartCoroutine(SliderEnemigoTrue());
           

        }
        else
        {
           
            GolpeSonido.Stop();
            Player.damaged = false;
            Anim.SetBool("danoEnemigo", false);
        }

    }


    IEnumerator SliderEnemigoTrue()
    {

        yield return new WaitForSeconds(0.0f);
        player.sliderAI.gameObject.SetActive(true);
        yield return new WaitForSeconds(3f);
        player.sliderAI.gameObject.SetActive(false);
       
        yield return null;
       
    }


}
 
No me funciona la animacion de daño


Etiquetas: