Как воспроизвести анимацию, подождать, а затем исчезнуть? (В единстве) - PullRequest
0 голосов
/ 24 января 2020

В основном то, что просит название. Я хочу воспроизвести свою анимацию, затем, когда анимация закончится, я хочу, чтобы произошла небольшая задержка, прежде чем она исчезнет со сцены примерно через 2 секунды. После того, как он исчезает, его следует отключить и сбросить.

Вот мой код, но когда я установил для разблокировки значение true, он ничего не делает.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimationController : MonoBehaviour
{
    public Animator anim;
    public SpriteRenderer sr;
    public bool unlocking;
    Sprite unlockSprite;
    Sprite lockSprite;
    Color temp;

    // Start is called before the first frame update
    void Start()
    {
        unlocking = false;
        unlockSprite = Resources.Load<Sprite>("unlock");
        lockSprite = Resources.Load<Sprite>("lock");
    }

    // Update is called once per frame
    void Update()
    {
        if (unlocking) {
            anim.Play("unlock");
            unlocking = false;
            sr.sprite = unlockSprite;
            System.Threading.Thread.Sleep(1000);
            StartCoroutine(FadeTo(0.0f, 2.0f));
            temp = new Color(sr.color.r, sr.color.g, sr.color.b, 0f);
            sr.color = temp;
            gameObject.SetActive(false);
            sr.sprite = lockSprite;
            temp = new Color(sr.color.r, sr.color.g, sr.color.b, 1f);
            sr.color = temp;
        }
    }

    IEnumerator FadeTo(float aValue, float aTime)
    {
        float alpha = sr.color.a;
        for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / aTime)
        {
            Color newColor = new Color(sr.color.r, sr.color.g, sr.color.b, Mathf.Lerp(alpha, aValue, t));
            sr.color = newColor;
            yield return null;
        }
    }
}

ОБНОВЛЕННЫЙ КОД:

    anim.Play("unlock");
    unlocking = false;
    if (animInfo.normalizedTime >= 1)
    {
        anim.enabled = false;
        sr.sprite = unlockSprite;
        StartCoroutine(FadeTo(0.0f, 2.0f));
        temp = new Color(sr.color.r, sr.color.g, sr.color.b, 0f);
        sr.color = temp;
        gameObject.SetActive(false);
        sr.sprite = lockSprite;
        temp = new Color(sr.color.r, sr.color.g, sr.color.b, 1f);
        sr.color = temp;
    }

1 Ответ

0 голосов
/ 25 января 2020

Один из способов сделать это - создать другую сопрограмму, что-то вроде этого:

IEnumerator UnlockSequence()
{
    while (animInfo.normalizedTime < 1.0f)
    {
        yield return null;
    }
    anim.enabled = false;
    sr.sprite = unlockSprite;
    yield return new WaitForSeconds(1.0f);
    yield return StartCoroutine(FadeTo(0.0f, 2.0f));
    // everything else
}
...