Jump to content
Sign in to follow this  
BennyDz

Duda con animaciones

Recommended Posts

Hola amigos en mi script tengo animaciones asi:

 

enemy.animation.Play("Attack_2");

enemy.animation.Play("GetHit");

 

friend.animation.Play("hurt");

friend.animation.Play("attack01");

 

los personajes inician con su IDLE. al momento de atacar o recibir un daño, se quedan sin ninguna animación pierden el idle.

mi forma de solucionarlo fue que cuando reproduscan la animacion cuando reciben daño  invoke en cierto tiempo la animacion de idle. pero cuando atacan pasa lo mismo. entonces queria preguntar si hay una forma mas limpia de hacerlo sin tantas invokaciones. algun update que detecte si no hay animacion. o algo asi. o como debe hacer eso.

soy nuevo con las animaciones. 

Share this post


Link to post
Share on other sites

Lanzar animaciones desde código si el objeto a animar es muy simple puede valer, pero para casos más complejos, si por ejemplo necesitas que siempre haya un estado activo o que las animaciones retornen a idle con x condición lo que tienes que hacer es usar mecanim.
 

Edited by zorranco

Share this post


Link to post
Share on other sites

Esa información es exigua, no es posible ayudarte a modificar tu script.

exigua? 

y yo tengo el control de mi script. porque no es posible?? solo si saben... que alguien me diga la forma correcta de hacer las animaciones... si es con co-liders.. colisiones.. etc... 

ni si quiera as visto mi script para decir que no es posible modificarlo haha

Lanzar animaciones desde código si el objeto a animar es muy simple puede valer, pero para casos más complejos, si por ejemplo necesitas que siempre haya un estado activo o que las animaciones retornen a idle con x condición lo que tienes que hacer es usar mecanim.
 

seria desde animator? o como es eso de mecanim? algo para leer o tutorial bro? o ejemplo

Share this post


Link to post
Share on other sites

exigua?

y yo tengo el control de mi script. porque no es posible?? ni si quiera as visto mi script para decir que no es posible modificarlo haha

Es eso precisamente lo que te esta diciendo ... como tu mismo dices, no muestras tu script pero quieres que alguien te diga como modificarlo ?

Share this post


Link to post
Share on other sites

Hola,  al referir información exigua indico información insuficiente, como podría ser que te indiquemos como aprobar o modificar tu script con fragmentos?. .. sería como tratar de armar un rompecabezas de 1000 piezas o más con 3 piezas.

Ok, ahora tenemos algo más con tu réplica. ..

En Unity he visto básicamente 3 sistemas de animación. ..

Usando el Sistema de animación legacy (con su componente Animation).

Usando el Sistema Mecanim (con su componente Animator).

Y el último pero muy importante usando directamente el Transform.

De este último he visto un ejemplo muy bueno al comprar el UFPS del asset store.

De los otros en el manual fácil puedes encontrar info...

http://docs.unity3d.com/Manual/AnimationSection.html

También en la sección de Tutorales en vídeo de Unity esta lo mejor...

http://unity3d.com/es/learn/tutorials

Un manjar. ..

Luego YouTube. ... solo buscar animación En Unity o Mecanim Unity y aparece una gran lista de tutoriales o explicaciones, resultado que muy lejos de ser exiguo, es pingüe... entonces puedes tomar solo lo que te sirva para adaptar a tu proyecto y tu versión de Unity y lograr un acabado brillante según tú percepción. Esto es un Arte del cual la creación de la historia es de lo único que no se puede encontrar información. Antes solo hay una nebulosa.

Del resto solo son procedimientos y lógicas. 

Edited by Oak Human Flesh

Share this post


Link to post
Share on other sites
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Holoville.HOTween;
using Holoville.HOTween.Plugins;






public class GameManager : MonoBehaviour {
    public GameObject goodEffect, badEffect, soulEffect, happyEffect;
    public Animator friendAnimator, enemyAnimator;
    public HpManager friendHpMan, enemyHpMan;

	
	public GameObject enemy;
	public GameObject friend;
	
	
	public GameObject resulAct;
	public GameObject resulLoss;
	public GameObject des1;
	public GameObject des2;
	public GameObject des3;
	public GameObject des4;
	public GameObject des5;
	
public string preg1;
public string preg2;

public string res1;
public string res2;

    Vector3 friendPos, enemyPos, friendHpPos, enemyHpPos, shieldPos;
    Transform friendHpGroup, enemyHpGroup, shieldGroup;

    Transform questionTf;
    Transform[] answerTfs;
    UILabel questionLabel;
    UILabel[] answerLabels;

    List<QuizData> quizList;
    int quizTotal;
    int quizIndex = 0;

    [HideInInspector]
    public int quizLength = 0;

    bool quizOn = true;

    void Awake()
    {
        Screen.SetResolution(480, 800, false); 
    }
    void Start()
    {
        InitGame();
        HideGame();
        //StartGame();
    }

    void HideGame()
    {
        ClearQuiz();
        Vector3 pos = friendPos;
        friendAnimator.transform.localPosition = new Vector3(pos.x * 4f, pos.y, pos.z);
        pos = enemyPos;
        enemyAnimator.transform.localPosition = new Vector3(pos.x * 4f, pos.y, pos.z);
        pos = friendHpPos;
        friendHpGroup.localPosition = new Vector3(pos.x * 3f, pos.y, pos.z);
        pos = enemyHpPos;
        enemyHpGroup.localPosition = new Vector3(pos.x * 3f, pos.y, pos.z);
        shieldGroup.localScale = new Vector3(2f, 2f, 1f);
        pos = shieldPos;
        shieldGroup.localPosition = new Vector3(pos.x, 0f, pos.z);
    }

    void StartGame()
    {
        IntroGame();
        DrawQuiz();
    }

    void DrawQuiz()
    {
        HideQuiz();
        StartCoroutine(DelayActoin(1f, () =>
        {
            SetQuiz();
            ShowQuiz();
        }));
    }

    void QuizInit()
    {
        quizList = new List<QuizData>();
        List<string> champs = new List<string>();
        string[,] dic = LolSkillData3.dic;
        for (int i = 0; i < dic.GetLength(0); i++)
        {
            string champ = dic[i,2];
            if (!champs.Contains(champ)) champs.Add(champ);
        }
        for (int i = 0; i < dic.GetLength(0); i++)
        {
            string idx = dic[i, 0];
            string skill = dic[i, 1];
            string champ = dic[i, 2];
            QuizData quiz = new QuizData();

            int t = champs.IndexOf(champ);
            List<int> ansIdList = new List<int>();
            Hashtable ansValList = new Hashtable();
            ansValList[0] = champs[t];
            ansValList[1] = champs[(t+1)%champs.Count];
            ansValList[2] = champs[(t+2)%champs.Count];
            ansValList[3] = champs[(t+3)%champs.Count];
            for (int j = 0; j < 4; j++) ansIdList.Add(j);
            ansIdList.Shuffle();
            for (int j = 0; j < 4; j++)
                if (ansIdList[j] == 0) quiz.correct = j;
            quiz.answer1 = "1. " + ansValList[ansIdList[0]] as string;
            quiz.answer2 = "2. " + ansValList[ansIdList[1]] as string;
            quiz.answer3 = "3. " + ansValList[ansIdList[2]] as string;
            quiz.answer4 = "4. " + ansValList[ansIdList[3]] as string;
            quiz.question = skill + "?";
            quiz.id = int.Parse(idx);
            quizList.Add(quiz);
        }
        quizTotal = quizList.Count;
    }

    void InitGame()
    {
        friendHpMan.InitHp();
        enemyHpMan.InitHp();
        questionTf = GameObject.Find("Question").transform;
        questionLabel = questionTf.GetComponentInChildren<UILabel>();
        answerLabels = new UILabel[4];
        answerTfs = new Transform[4];
        int i = 0;
        foreach (Transform tf in GameObject.Find("Answers").transform)
        {
            answerTfs[i] = tf;
            answerLabels[i] = tf.GetComponentInChildren<UILabel>();
            i++;
        }
        QuizInit();

        shieldGroup = GameObject.Find("ShieldGroup").transform;
        shieldPos = shieldGroup.localPosition;
        friendPos = friendAnimator.transform.localPosition;
        enemyPos = enemyAnimator.transform.localPosition;
        friendHpGroup = friendHpMan.hpBar.transform.parent;
        enemyHpGroup = enemyHpMan.hpBar.transform.parent;
        friendHpPos = friendHpGroup.localPosition;
        enemyHpPos = enemyHpGroup.localPosition;
    }

    void IntroGame()
    {
        friendAnimator.CrossFade("Walk", 0.2f);
        enemyAnimator.CrossFade("Walk", 0.2f);
        Vector3 pos = friendPos;
        friendAnimator.transform.localPosition = new Vector3(pos.x * 4f, pos.y, pos.z);
        TweenParms parms = new TweenParms().Prop("localPosition", friendPos).Ease(EaseType.Linear).OnComplete(OnFriendStop);
        HOTween.To(friendAnimator.transform, 2f, parms);
        
        pos = enemyPos;
        enemyAnimator.transform.localPosition = new Vector3(pos.x * 4f, pos.y, pos.z);
        parms = new TweenParms().Prop("localPosition", pos).Ease(EaseType.Linear).OnComplete(OnEnemyStop);
        HOTween.To(enemyAnimator.transform, 2f, parms);

        pos = shieldPos;
        shieldGroup.localPosition = new Vector3(pos.x, 0f, pos.z);
        parms = new TweenParms().Prop("localPosition", pos).Delay(1f);
        HOTween.To(shieldGroup, 1f, parms);

        shieldGroup.localScale = new Vector3(2f, 2f, 1f);
        parms = new TweenParms().Prop("localScale", new Vector3(0.8f, 0.8f, 1f));
        HOTween.To(shieldGroup, 1f, parms);

        pos = friendHpPos;
        friendHpGroup.localPosition = new Vector3(pos.x * 3f, pos.y, pos.z);
        parms = new TweenParms().Prop("localPosition", pos).Delay(0.5f);
        HOTween.To(friendHpGroup, 1f, parms);

        pos = enemyHpPos;
        enemyHpGroup.localPosition = new Vector3(pos.x * 3f, pos.y, pos.z);
        parms = new TweenParms().Prop("localPosition", pos).Delay(0.5f);
        HOTween.To(enemyHpGroup, 1f, parms);
    }

    void OnFriendStop()
    {
        //friendAnimator.CrossFade("Idle", 0.2f);
		friend.animation.CrossFade("defense", 0.2f);
    }
    void OnEnemyStop()
    {
       // enemyAnimator.CrossFade("Idle", 0.2f);
		enemy.animation.CrossFade("Idle_1", 0.2f);
    }

    void ClearQuiz()
    {
        questionTf.localScale = new Vector3(0f, 1f, 1f);
        int i = -1;
        foreach (Transform tf in answerTfs)
        {
            tf.localPosition = new Vector3(900f * i, tf.localPosition.y, tf.localPosition.z);
            i *= -1;
        }
    }

    void HideQuiz()
    {
        TweenParms parms = new TweenParms().Prop("localScale", new Vector3(0f, 1f, 1f));
        HOTween.To(questionTf, 0.5f, parms);
        int i = -1;
        foreach (Transform tf in answerTfs)
        {
            parms = new TweenParms().Prop("localPosition", new Vector3(900f * i, tf.localPosition.y, tf.localPosition.z));
            HOTween.To(tf, 0.5f, parms);
            i *= -1;
        }
    }

    void TypeQuiz()
    {
        questionLabel.text = quizList[quizIndex].question.Substring(0, quizLength);
    }

    void ShowQuiz()
    {
        TweenParms parms = new TweenParms().Prop("localScale", new Vector3(1f, 1f, 1f));
        HOTween.To(questionTf, 0.5f, parms);
        int i = 1;
        foreach (Transform tf in answerTfs)
        {
            parms = new TweenParms().Prop("localPosition", new Vector3(0f, tf.localPosition.y, tf.localPosition.z)).Delay(0.3f * i++);
            HOTween.To(tf, 0.5f, parms);
        }
        quizOn = true;

        quizLength = 0;
        parms = new TweenParms().Prop("quizLength", quizList[quizIndex].question.Length).Ease(EaseType.Linear).OnUpdate(TypeQuiz);
        HOTween.To(this, 1f, parms);
    }

    string QuizMakeString(string str) 
    {
        return (str.Length > 41) ? str.Substring(0, 40) : str;
    }

    void SetQuiz()
    {
        quizIndex = Random.Range(0, quizTotal) % quizTotal;
        QuizData item = quizList[quizIndex];
        answerLabels[0].text = QuizMakeString(item.answer1);
        answerLabels[1].text = QuizMakeString(item.answer2);
        answerLabels[2].text = QuizMakeString(item.answer3);
        answerLabels[3].text = QuizMakeString(item.answer4);
        questionLabel.text = item.question;
    }
    
	void Update () {
        if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit();
        if (Input.GetButton("Fire1"))
        {
            //DrawQuiz();
        }
	}



	
    void ClickAnswer(int no)
    {


	
        if (!quizOn) return;
        quizOn = false;
        QuizData item = quizList[quizIndex];
        if (item.correct == no) 
        {
            Instantiate(goodEffect);
            GameObject go = Instantiate(soulEffect) as GameObject;
            go.GetComponent<SoulEffect>().posX = -1f;
            StartCoroutine(DelayActoin(0.6f, () =>
            {
                go = Instantiate(happyEffect, new Vector3(-0.7f, 1f, 0f), Quaternion.identity) as GameObject;
				PlayerPrefs.SetInt("Puntaje",PlayerPrefs.GetInt("Puntaje")+ 1);
				//Debug.Log("Tu puntaje es de "+ PlayerPrefs.GetInt("Puntaje"));
				PlayerPrefs.SetInt("vidaEnemy",PlayerPrefs.GetInt("vidaEnemy")+ 1);

		
				if 	(PlayerPrefs.GetInt("vidaEnemy") == 10) {
                Invoke("OnGameStopWin", 5);
				Invoke("EnemyDied", 0.5f);
				friend.animation.Play("attack01");
				des1.SetActive(false);
				des5.SetActive(false);}
				else{
			    friend.animation.Play("attack01");
                Invoke("EnemyRecivedHit", 0.5f);
				
                }
				
	if (friend.animation.IsPlaying("defense") == true){

	Debug.Log("Hello");}
	
            }));
            friendAnimator.CrossFade("Good", 0.2f);
            enemyAnimator.CrossFade("Bad", 0.2f);
        }
        else
        {
            Instantiate(badEffect);
            GameObject go = Instantiate(soulEffect) as GameObject;
            go.GetComponent<SoulEffect>().posX = 1f;
            StartCoroutine(DelayActoin(0.6f, () =>
            {
                go = Instantiate(happyEffect, new Vector3(0.7f, 1f, 0f), Quaternion.identity) as GameObject;
                
				PlayerPrefs.SetInt("vida",PlayerPrefs.GetInt("vida")+ 1);

				
if 	(PlayerPrefs.GetInt("vida") == 3) {
Invoke("OnGameStopLoss", 5);
Invoke("FriendDied", 0.7f);
enemy.animation.Play("Attack_2");
}
else {
Invoke("FriendRecivedHit", 0.7f);
enemy.animation.Play("Attack_2");
}




            }));
            friendAnimator.CrossFade("Bad", 0.2f);
            enemyAnimator.CrossFade("Good", 0.2f);
        }


        StartCoroutine(DelayActoin(3f, () =>
        {
            DrawQuiz();
        }));
    }

		    void EnemyDied()
    {
		des1.SetActive(false);
        des5.SetActive(false);
		enemyHpMan.DoDamageHp(10);
		enemy.animation.Play("Die");
    }
	    void FriendDied()
    {
        friendHpMan.DoDamageHp(35);
        friend.animation.Play("death");
		des1.SetActive(false);
        des5.SetActive(false);
    }
	
	    void EnemyRecivedHit()
    {
		enemy.animation.Play("GetHit");
		enemyHpMan.DoDamageHp(10);
		Invoke("EnemyRestaure", 1.1f);
    }
	    void FriendRecivedHit()
    {
        friend.animation.Play("hurt");
		friendHpMan.DoDamageHp(35);
		Invoke("FriendRestaure", 0.533f);

    }
	void FriendRestaure()
    {
		friend.animation.Play("defense");
    }
	void EnemyRestaure()
    {
        enemy.animation.Play("Idle_1");
    }	
	

	
	
	void OnGameStopLoss()
    {
	des2.SetActive(false);
	des3.SetActive(false);
	des4.SetActive(false);
	resulLoss.SetActive(true);
    }
    void OnGameStopWin()
    {
	resulAct.SetActive(true);
	des2.SetActive(false);
	des3.SetActive(false);
	des4.SetActive(false);	
    }
	
	
    public void OnClickAnswer1()
    {
        ClickAnswer(0);
    }
    public void OnClickAnswer2()
    {
        ClickAnswer(1);
    }
    public void OnClickAnswer3()
    {
        ClickAnswer(2);
    }
    public void OnClickAnswer4()
    {
        ClickAnswer(3);
    }

    public IEnumerator DelayActoin(float dtime, System.Action callback)
    {
        yield return new WaitForSeconds(dtime);
        callback();
    }
}

 

 

Este es mi script, esta algo feito xD! se que estoy usando codigos de mas xD! 

consiste en un juego de preguntas.

que si respondes bien friend ataca y si respondes mal la pregunta el enemigo te ataca.

estoy usando animaciones donde detecta si respondio bien o mal. 

invokacion para el tiempo que tarda en atacar el player reciba el hit.

 

Share this post


Link to post
Share on other sites

Ahora comprendo...

Supongo que el friend ataca, y después de que culmina el ataque, a el friend no se le indica que vuelva a la animación Idle, por eso se quedan como momificados los personajes. 

Desgraciadamente hoy no te puedo ayudar con mi PC y crear o modificar un script para adaptarlo a tu proyecto, tengo bastante trabajo en un B787 software Update.

Pero... dependiendo de el instante en que se requiere volver al Idle, se debe poner el código respectivo para que ejecute esta animación, la cual supongo esta configurada como bucle o loop en el inspector de Unity. 

En mi caso crearía una función para controlar las animaciones, la cual me permita reutilizar código o fácilmente cambiar de sistema de animación,  y por cierto mejorar la interpretación de la lógica humana.  

Respecto a el uso de el Invoke () supongo que esta bien si el resultado es inevitable, de lo contrario usar colliders u otro sistema para gatillar las animaciones sería mejor. 

En mi caso también almacenaria las animaciones y los componentes Animation en una matriz (una para cada una) para luego usarlas.

Bueno son ideas, no puedo plasmarlas en código desde mi teléfono móvil, lo siento.  Pero por ahí se va. ;)

 

 

Share this post


Link to post
Share on other sites

Ahora comprendo...

Supongo que el friend ataca, y después de que culmina el ataque, a el friend no se le indica que vuelva a la animación Idle, por eso se quedan como momificados los personajes. 

Desgraciadamente hoy no te puedo ayudar con mi PC y crear o modificar un script para adaptarlo a tu proyecto, tengo bastante trabajo en un B787 software Update.

Pero... dependiendo de el instante en que se requiere volver al Idle, se debe poner el código respectivo para que ejecute esta animación, la cual supongo esta configurada como bucle o loop en el inspector de Unity. 

En mi caso crearía una función para controlar las animaciones, la cual me permita reutilizar código o fácilmente cambiar de sistema de animación,  y por cierto mejorar la interpretación de la lógica humana.  

Respecto a el uso de el Invoke () supongo que esta bien si el resultado es inevitable, de lo contrario usar colliders u otro sistema para gatillar las animaciones sería mejor. 

En mi caso también almacenaria las animaciones y los componentes Animation en una matriz (una para cada una) para luego usarlas.

Bueno son ideas, no puedo plasmarlas en código desde mi teléfono móvil, lo siento.  Pero por ahí se va. ;)

 

 

exacto amigo, no tiene algo que le indique que regrese al idle cuando ataca.

asi me pasaba cuando recibian un ataque pero pues coloque un invoke. 

igual puedo poner otro invoke para que despues de que ataque regrese al idle. pero vine aqui a postaear para hacerlo de una forma mas correcta y limpia. no te preocupes te espero cuando tengas tiempo a ver si me hechas una manita bro. gracias por tu tiempo

 

Share this post


Link to post
Share on other sites

Bueno supongo que lo mas fácil seria agregar al final del Update() la instrucción de ejecutar el Idle, esto dependiendo de si se esta ejecutando alguna animación:

void Update ()
{
    // el codigo ya programado....
    
    // al final del Update revisar si alguna animacion esta siendo ejecutada
    // en el componente respectivo...
    
    // Revisa si ninguna animacion esta siendo ejecutada por dicho componente...
    if (!animationComponentLegacy.isPlaying)
    {
        //... ejecuta la animacion idle.
        animationComponentLegacy.CrossFade("idle", 0.15f);
    }
}

luego probe esto con este script y un Gato animado...

using UnityEngine;
using System.Collections;

public class PlayerCatController : MonoBehaviour {
    private Animation animationComponentLegacy;
    public string[] animClips;
    public string[] controls;
	// Use this for initialization
	void Start () {
            animationComponentLegacy = gameObject.GetComponentInChildren<Animation>();
	}
	
	// Update is called once per frame
	void Update ()
        {
            CatControls();

            if (!animationComponentLegacy.isPlaying)
            {
                CatAnimate(0, 0.5f);// play the idle animState
            }
	}
    void CatControls()
    {
        for (int i = 0; i < controls.Length; i++)
        {
            if (Input.GetButtonDown(controls[i]))
            {
                CatAnimate(i + 1, 0.3f);
            }
        }
    }

    void CatAnimate(int animID, float fadeTime)
    {
        animationComponentLegacy.CrossFade(animClips[animID], fadeTime);
    }
}

Funciona bien. ;)

Edited by Oak Human Flesh

Share this post


Link to post
Share on other sites

Bueno supongo que lo mas fácil seria agregar al final del Update() la instrucción de ejecutar el Idle, esto dependiendo de si se esta ejecutando alguna animación:

void Update ()
{
    // el codigo ya programado....
    
    // al final del Update revisar si alguna animacion esta siendo ejecutada
    // en el componente respectivo...
    
    // Revisa si ninguna animacion esta siendo ejecutada por dicho componente...
    if (!animationComponentLegacy.isPlaying)
    {
        //... ejecuta la animacion idle.
        animationComponentLegacy.CrossFade("idle", 0.15f);
    }
}

luego probe esto con este script y un Gato animado...

using UnityEngine;
using System.Collections;

public class PlayerCatController : MonoBehaviour {
    private Animation animationComponentLegacy;
    public string[] animClips;
    public string[] controls;
	// Use this for initialization
	void Start () {
            animationComponentLegacy = gameObject.GetComponentInChildren<Animation>();
	}
	
	// Update is called once per frame
	void Update ()
        {
            CatControls();

            if (!animationComponentLegacy.isPlaying)
            {
                CatAnimate(0, 0.5f);// play the idle animState
            }
	}
    void CatControls()
    {
        for (int i = 0; i < controls.Length; i++)
        {
            if (Input.GetButtonDown(controls[i]))
            {
                CatAnimate(i + 1, 0.3f);
            }
        }
    }

    void CatAnimate(int animID, float fadeTime)
    {
        animationComponentLegacy.CrossFade(animClips[animID], fadeTime);
    }
}

Funciona bien. ;)

 

FUNCIONO AL 100%

pense que te habias olvidado, ahorita precisamente iva retomar mi proyecto y lo iva llenar de invokes. jajaja

sabes como hacer que cuando reprodusca la animacion de death, ya no reprodusca el idle?

si es mucho pedir, ahorita hago algun player pref. que ponga cuando termino la partida. y ya le agrego un if al update que si tiene el player pref ya no reprodusca el idle xD 

Edited by BennyDz

Share this post


Link to post
Share on other sites

Simple... un bool para la muerte ;)

luego si no esta muerto se evalua si se debe iniciar el idle siempre que no haya otra animación ejecutándose.

    bool death = false;
    void Update ()
    {
       // other code....
       //................................................................
       
        if(!death)
        {
            if (!animationComponentLegacy.isPlaying)
            {
                animationComponentLegacy.CrossFade("idle", 0.3f);// play the idle animState
            }
        }
     }

 

Edited by Oak Human Flesh

Share this post


Link to post
Share on other sites

Simple... un bool para la muerte ;)

luego si no esta muerto se evalua si se debe iniciar el idle siempre que no haya otra animación ejecutándose.

    bool death = false;
    void Update ()
    {
       // other code....
       //................................................................
       
        if(!death)
        {
            if (!animationComponentLegacy.isPlaying)
            {
                animationComponentLegacy.CrossFade("idle", 0.3f);// play the idle animState
            }
        }
     }

 

ya no entendi bien eso del bool xD! ahi esta determinando que : death = false osea q no esta muerto xD en mi script manager tengo que poner el que el bool death pase a true cuando muera? o como? :P 

Share this post


Link to post
Share on other sites

si no esta muerto evalúa y ejecuta idle. :)

pero en donde se esta definiendo si esta vivo o muerto? xD! asi tal cual meto eso a mi script y va funcionar? tengo que declarar cuando esta vivo o muerto no? xD 

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...