浮动消息的实现

public class MessageBar : MonoBehaviour
{
    public TextMeshPro textMeshPro;
    SpriteRenderer spriteRenderer;

    static MessageBar instance;
    Queue<string> messages = new Queue<string>();

    void Awake()
    {
        instance = this;
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    IEnumerator Start()
    {
        var delay = new WaitForSeconds(2);
        while (true)
        {
            yield return null;
            if (messages.Count > 0)
            {
                textMeshPro.text = messages.Dequeue();
                spriteRenderer.color = new Color(1, 1, 1, 0);
                textMeshPro.color = new Color(1, 1, 1, 0);
                var T = 0f;
                while (T < 1)
                {
                    T += Time.deltaTime;
                    spriteRenderer.color = new Color(1, 1, 1, T);
                    textMeshPro.color = new Color(1, 1, 1, T);
                    yield return null;
                }
                spriteRenderer.color = Color.white;
                textMeshPro.color = Color.white;
                yield return delay;
                while (T > 0)
                {
                    T -= Time.deltaTime;
                    spriteRenderer.color = new Color(1, 1, 1, T);
                    textMeshPro.color = new Color(1, 1, 1, T);
                    yield return null;
                }
                spriteRenderer.color = new Color(1, 1, 1, 0);
                textMeshPro.color = new Color(1, 1, 1, 0);
            }
        }

    }

    public static void Show(string text)
    {
        instance.messages.Enqueue(text);
    }
}

最后更新于