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?
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