Jump to content
MatiasBoyer

Esperar a que animator termine

Recommended Posts

Hola a todos,
Tengo un problema en uno de mis scripts ya que no entiendo lo que me dice el propio Unity.

Quiero obtener el tiempo que tarda una animación en terminarse, y al obtenerlo hago un yield WaitForSeconds(TiempoAnim) y me da esto: 

Assets/_importado/_script/doAnim.js(19,26): BCE0048: Type 'UnityEngine.Animator' does not support slicing.

 

Mi script:

#pragma strict
var NAlea : int;
var Pato : GameObject;
private var anim : Animator;

function Start(){
        anim = Pato.GetComponent.<Animator>();
        Empezar();
}

function Empezar() {
    //Obtener numero aleatorio para la animacion
    NAlea = Random.Range(0, 5);
    Debug.Log("El numero aleatorio para la animacion es " + NAlea);
}

function Update() {
    NAlea.ToString();
    //reproducimos la animacion
    anim.Play("" + NAlea);
    //intentamos obtener el tiempo de la animacion
    var TiempoAnim = anim[NAlea].length;
    //esperamos el TiempoAnim
    yield WaitForSeconds(TiempoAnim);
    Debug.Log("Termine");
}

Gracias a todos por su paciencia ^^

Share this post


Link to post
Share on other sites

No lo entiendo.
 

var TiempoAnim = anim[NAlea].length;


¿Qué es eso? TiempoAnim es una variable tipo entero, vale, pero anim es una variable tipo Animator, no es un array que tenga varios Animator, por lo que anim[_] debería dar algún error de tipo ¿no?.

Más aún así, aunque lo aceptara, TiempoAnim lo que está guardando es el número de nodos que tiene el supuesto array anim, no la duración de estos, por lo que, tampoco hay correlación ahí. (Puedo tenes 2 nodos con animaciones de 30 segundos ¿?¿?), por lo que mientras TiempoAnim me dice 2, el tiempo total de las animaciones sería 60.

En fin, con el Animator (es decir, con el sistema Mecanim), las animaciones se suelen encadenar mediante la opción "It has Exit Time" (en Unity5) con ello, hace que no se acabe el estado hasta que la animación se ha ejecutado completamente. Pero si necesitas obtener datos para el código, lo que tienes que buscar es la variable de tipo AnimatorState y AnimatorStateInfo

Veamos, tu le das a play a una animación aleatoria, que está organizada en tu AnimatorController, y ese controller tiene por ejemplo, 5 estados, cada uno con el nombre 0, 1, 2, 3, 4 y 5.

Después para saber la duración, tiene que mirar:

 

var stateInf : AnimatorStateInfo = anim.GetCurrentAnimatorStateInfo (0); 
//El 0 es la capa donde se está ejecutando el estado a buscar.
var TiempoAnim = stateInf.length;


Ahí si pillarías la duración del estado.


 

Edited by Antonio

Share this post


Link to post
Share on other sites

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