Attendere per un’animazione di finire in unity3d

Ho un’animazione che si svolge nell’ Update-funzione, in un Switch caso.

Dopo l’animazione finiture, un Booleano viene impostata su true.

Il mio codice:

case "play":    
    animation.Play("play");     
    gobool = true;
    startbool = false;
    break;

Il problema è il mio gobool e startbool ottenere immediatamente senza finire l’animazione. Come posso lasciare il mio programma di attendere fino a che l’animazione è finito?

InformationsquelleAutor Sona | 2013-02-27



One Reply
  1. 7

    Fondamentalmente, è necessario fare due cose per questa soluzione:

    1. Avviare l’animazione.
    2. Attendere per l’animazione alla fine prima di giocare la prossima animazione.

    Un esempio di come questo può essere fatto è:

    animation.PlayQueued("Something");
    yield WaitForAnimation(animation);

    E la definizione per WaitForAnimation sarebbe:

    C#:

    private IEnumerator WaitForAnimation (Animation animation)
    {
        do
        {
            yield return null;
        } while (animation.isPlaying);
    }

    JS:

    function WaitForAnimation (Animation animation)
    {
        yield; while ( animation.isPlaying ) yield;
    }

    Il ciclo do-while è venuto da esperimenti che hanno dimostrato che il animation.isPlaying restituisce false nello stesso frame PlayQueued è chiamato.

    Con un po ‘ di bricolage è possibile creare un metodo di estensione per l’animazione che semplifica questo come:

    public static class AnimationExtensions
    {
        public static IEnumerator WhilePlaying( this Animation animation )
        {
            do
            {
                yield return null;
            } while ( animation.isPlaying );
        }
    
        public static IEnumerator WhilePlaying( this Animation animation,
        string animationName )
        {
            animation.PlayQueued(animationName);
            yield return animation.WhilePlaying();
        }
    }

    Infine, si può facilmente utilizzare questo codice:

    IEnumerator Start()
    {
        yield return animation.WhilePlaying("Something");
    }

    Origine, alternative e di discussione.

Lascia un commento