using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine.UI; using UnityEngine; public class SkillTips : MonoBehaviour { public const float tweenDuration = 0.5f; public const float delayDuration = 0.6f; public const float beginingX = 400f; [SerializeField]public Image imgIcon; [SerializeField]public Image imgSkillName; [SerializeField] public Image imageBg; private Tween tween1; private Tween tween2; private Tween tween3; public void PlayMotion(BattleField battleField, bool isRed, TeamHero teamHero, SkillConfig skillConfig) { if (teamHero == null || skillConfig == null) { return; } if (skillConfig.FuncType != 2) return; KillAllTweens(); imgIcon.sprite = UILoader.LoadSprite("HeroHead", teamHero.skinConfig.SquareIcon); imgSkillName.sprite = UILoader.LoadSprite("SkillNameIcon", skillConfig.SkillTipsName); imgSkillName.SetNativeSize(); // 保证开始时所有图片为可见(alpha=1) if (imageBg != null) { var c = imageBg.color; c.a = 1f; imageBg.color = c; } if (imgIcon != null) { var c = imgIcon.color; c.a = 1f; imgIcon.color = c; } if (imgSkillName != null) { var c = imgSkillName.color; c.a = 1f; imgSkillName.color = c; } gameObject.SetActive(true); float posY = transform.localPosition.y; transform.localPosition = isRed ? new Vector3(-beginingX, posY, 0f) : new Vector3(beginingX, posY, 0f); tween1 = transform.DOLocalMoveX(0, tweenDuration / battleField.speedRatio, false).SetEase(Ease.Linear).OnComplete(() => { tween1 = null; tween3 = DOVirtual.DelayedCall(delayDuration / battleField.speedRatio, () => { tween3 = null; // tween2 改为做减淡(对 imageBg、imgIcon、imgSkillName 同步淡出) float fadeDuration = tweenDuration / battleField.speedRatio; Sequence seq = DOTween.Sequence(); if (imageBg != null) seq.Join(imageBg.DOFade(0f, fadeDuration).SetEase(Ease.InQuad)); if (imgIcon != null) seq.Join(imgIcon.DOFade(0f, fadeDuration).SetEase(Ease.InQuad)); if (imgSkillName != null) seq.Join(imgSkillName.DOFade(0f, fadeDuration).SetEase(Ease.InQuad)); seq.OnComplete(() => { tween2 = null; // 恢复图片 alpha,保证下次显示时可见 if (imageBg != null) { var cc = imageBg.color; cc.a = 1f; imageBg.color = cc; } if (imgIcon != null) { var cc = imgIcon.color; cc.a = 1f; imgIcon.color = cc; } if (imgSkillName != null) { var cc = imgSkillName.color; cc.a = 1f; imgSkillName.color = cc; } transform.localPosition = isRed ? new Vector3(-beginingX, posY, 0f) : new Vector3(beginingX, posY, 0f); gameObject.SetActive(false); }); tween2 = seq; battleField.battleTweenMgr.OnPlayTween(tween2); }); battleField.battleTweenMgr.OnPlayTween(tween3); }); battleField.battleTweenMgr.OnPlayTween(tween1); } public void KillAllTweens() { if (tween1 != null) { tween1.Kill(); tween1 = null; } if (tween2 != null) { tween2.Kill(); tween2 = null; } if (tween3 != null) { tween3.Kill(); tween3 = null; } // 被强制停止时也需要恢复 alpha if (imageBg != null) { var cc = imageBg.color; cc.a = 1f; imageBg.color = cc; } if (imgIcon != null) { var cc = imgIcon.color; cc.a = 1f; imgIcon.color = cc; } if (imgSkillName != null) { var cc = imgSkillName.color; cc.a = 1f; imgSkillName.color = cc; } } }