hch
2025-12-05 f189918c90c0ab4090fe9cf2736a2b529317e0c7
0312 消息提示增加间隔播放
1个文件已修改
44 ■■■■ 已修改文件
Main/System/Tip/ScrollTipWin.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Tip/ScrollTipWin.cs
@@ -1,4 +1,4 @@
//--------------------------------------------------------
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Saturday, October 07, 2017
//--------------------------------------------------------
@@ -6,6 +6,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
@@ -27,6 +28,8 @@
    [SerializeField, Header("隐藏时间")]
    float m_TipHideTime = 0.5f;
    bool isLoopRunning = false;
    protected override void InitComponent()
    {
@@ -44,18 +47,48 @@
    protected override void OnPreClose()
    {
        ScrollTip.OnTipReceiveEvent -= OnTipReceiveEvent;
        ScrollTip.OnTipReceiveEvent -= OnAddTipEvent;
        ScrollTip.ReleaseAll();
    }
    protected override void OnPreOpen()
    {
        ScrollTip.tipMoveTime = m_TipMoveTime;
        ScrollTip.OnTipReceiveEvent += OnTipReceiveEvent;
        ScrollTip.OnTipReceiveEvent += OnAddTipEvent;
        mask.sizeDelta = mask.sizeDelta.SetY(tipDisplayCnt * m_TipHeight + (tipDisplayCnt - 1) * (m_TipDistance - m_TipHeight) + 10);
        for (int i = 0; i < ScrollTip.m_Hints.Count; i++)
        // 如果有待处理的提示,立即启动循环
        if (ScrollTip.m_Hints.Count > 0)
        {
            LoopTipReceiveEvent().Forget();
        }
    }
    async UniTask LoopTipReceiveEvent()
    {
        if (isLoopRunning) return; // 防止重复启动
        isLoopRunning = true;
        try
        {
            while (ScrollTip.m_Hints.Count > 0)
        {
            OnTipReceiveEvent();
                await UniTask.Delay(100);
            }
        }
        finally
        {
            isLoopRunning = false;
        }
    }
    void OnAddTipEvent()
    {
        // 只有在没有循环运行时才启动新的循环
        if (!isLoopRunning)
        {
            LoopTipReceiveEvent().Forget();
        }
    }
@@ -66,9 +99,6 @@
            if (ScrollTip.m_ActiveTips.Count >= tipDisplayCnt)
            {
                ScrollTip.Release(ScrollTip.m_ActiveTips[0], false);
            }
            if (ScrollTip.m_ActiveTips.Count >= tipDisplayCnt)
            {
                ScrollTip.tipMoveTime = Time.deltaTime;
            }
            else