Noticias

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

Esperar a que animator termine

Iniciado por MatiasBoyer, Julio 25, 2015, 12:47:42 AM

Tema anterior - Siguiente tema
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 ^^

Julio 27, 2015, 03:28:59 PM #1 Ultima modificación: Julio 27, 2015, 03:31:25 PM por Antonio
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.
 

Etiquetas: