Noticias

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

Ayuda con destruir enemigo

Iniciado por brok, Diciembre 02, 2015, 08:59:58 PM

Tema anterior - Siguiente tema
Hola, mi consulta es ¿que puedo hacer? para que cada peronaje enemigo instanciado tenga su propia vida y se destuya uno solo el que terminado de golpear.
using UnityEngine;
using System.Collections;


public class vidaAI : MonoBehaviour {
   
    public static int vida_Ai;
    public  int MaxVida = 100;
    public  int MinVida = 0;
    public  int scoreValue = 10;
    Animator Anim;
    public AudioClip voz;
    AudioSource source;
   

    void Start ()
    {
        source = GetComponent<AudioSource>();
        Anim = GetComponent<Animator>();
        if (vida_Ai <= 0)
            vida_Ai = MaxVida;
            ScoreManager.score += scoreValue;
            ApplyCure(0);

    }
    void Update()
    {
        StartCoroutine(DestruirEnemigo());
    }
    public void ApplyCure(int Value)
    {
        vida_Ai += Value;
        vida_Ai = Mathf.Clamp(vida_Ai, MinVida, MaxVida);
    }
   
   public  void QuitarVIdaAI(int Value, Vector3 hitPoint)
    {
       
            vida_Ai -= Value;
        vida_Ai = Mathf.Clamp(vida_Ai, MinVida, MaxVida);
       


    }
    IEnumerator DestruirEnemigo()
    {
        if (vida_Ai <= 0)
        {

           
            Anim.SetFloat("golpe3", 0.0f);
            Anim.SetFloat("golpe1", 0.0f);
            Anim.SetFloat("golpe2", 0.0f);
            Anim.SetFloat("idle", 0.0f);
            Anim.SetFloat("danoEnemigo", 1.0f);
            source.clip = voz;
            source.Play();
            yield return new WaitForSeconds(4f);
            Destroy(gameObject);

            yield return null;
        }

       

       
    }

}
Le he metido animacion y sonido.

un ejemplo de, como te comente en otro post, porque no utilizar variables estaticas

Ya he usado la de la vida_ai como static, no se muy bien a que te refieres.

pues precisamente me refiero a eso ... que la has hecho estatica. las variables estaticas son para usos concretos y si las usas para cualquier cosa, como controlar la vida de los personajes, te puedes encontrar con errores asi

Si lo cambio tengo que cambiar y enlazar un monton de cosas y sy luego no funciona
ya lo he echo y se queda la vida del enemigo a 0

bueno, si por cambiar la variable quitando el static vas a tener que cambiar y enlazar (no se a que te refieres con eso) un monton de cosas ... es una manera de para la proxima hacerlo bien desde el principio ^.^ pero vamos, que deja el static si quieres y asi no tendras que cambiar un monton de cosas pero tambien es verdad que con static te sera completamente 100% imposible controlar la vida de los enemigos.

Diciembre 02, 2015, 11:13:56 PM #6 Ultima modificación: Diciembre 02, 2015, 11:17:46 PM por brok
ya lo he cambiado pero se me queda los enemigos instanciados no se mueve el slider pero quita vida bien y se destruye el que tiene que destruirse.
using UnityEngine;
using System.Collections;


public class vidaAI : MonoBehaviour {
   
    public int vida_Ai;
    public int MaxVida = 100;
    public int MinVida = 0;
    public int scoreValue = 10;
    Animator Anim;
    public AudioClip voz;
    AudioSource source;
   

    void Start ()
    {
        source = GetComponent<AudioSource>();
        Anim = GetComponent<Animator>();
       


    }
    void Awake()
    {
        vida_Ai = MaxVida;
        ApplyCure(0);
    }
    public void ApplyCure(int Value)
    {
        vida_Ai += Value;
        vida_Ai = Mathf.Clamp(vida_Ai, MinVida, MaxVida);
    }
   
   public  void QuitarVIdaAI(int Value, Vector3 hitPoint)
    {
       
            vida_Ai -= Value;
        vida_Ai = Mathf.Clamp(vida_Ai, MinVida, MaxVida);

        StartCoroutine(DestruirEnemigo());

    }
    IEnumerator DestruirEnemigo()
    {
        if (vida_Ai <= 0)
        {
            ScoreManager.score += scoreValue;
           
            vida_Ai = MaxVida;
            Anim.SetFloat("golpe3", 0.0f);
            Anim.SetFloat("golpe1", 0.0f);
            Anim.SetFloat("golpe2", 0.0f);
            Anim.SetFloat("idle", 0.0f);
            Anim.SetFloat("danoEnemigo", 1.0f);
            source.clip = voz;
            source.Play();
            yield return new WaitForSeconds(4f);
           
            Destroy(gameObject);
           
            yield return null;
        }

       

       
    }

}
   


 

No me funciona intancioando el enemigo prefab pero cuando arrastro prefab a la escena funciona bien esto es una locura.
vidaAI vida_ai;

vida_ai = GameObject.FindGameObjectWithTag("Enemigo").GetComponent<vidaAI>();


sliderAI.value = vida_ai.vida_Ai;
Asin llamo al script vida ai desde el player


Etiquetas: