From 1fb39ecb7c8e540ed31ad6b976ed509ea98f3d87 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Fri, 04 Dec 2020 11:29:29 +0800 Subject: [PATCH] 增加按钮点击特效 增加新手引导结束特效 --- Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs | 168 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 136 insertions(+), 32 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs b/Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs index 2c6b428..b6f22ed 100644 --- a/Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs +++ b/Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs @@ -1,10 +1,6 @@ using Core.Utilities; using DG.Tweening; -using System; -using System.Collections; -using System.Collections.Generic; using TMPro; -using TowerDefense.UI.HUD; using UnityEngine; using UnityEngine.UI; @@ -12,16 +8,11 @@ { public TextMeshProUGUI bloodText; - // Start is called before the first frame update - void Start() - { + public Image SlowDownWord; - } + public Image CritWord; - // Update is called once per frame - void Update() - { - } + private float scaleOffect = 1.5f; /// <summary> /// 当前的 @@ -29,34 +20,79 @@ /// <param name="x"></param> /// <param name="y"></param> /// <param name="text"></param> - public void moveBloodText( float x,float y,string text,bool crit = false ) + public void moveBloodText(float x, float y, string text, bool crit = false) { - // 先设置Text的位置到一个标准位置 + // // 先设置Text的位置到一个标准位置 + // Vector3 pos = bloodText.transform.position; + // pos.x = x; + // pos.y = y; + // pos.z = 0; + // bloodText.transform.position = pos; + + // Vector3 sval = bloodText.transform.localScale; + // sval.x = 1.0f; + // sval.y = 1.0f; + // sval.z = 1.0f; + // bloodText.transform.localScale = sval * scaleOffect; + + bloodText.text = text; + // this.TextMove(bloodText, crit); + Vector3 pos = bloodText.transform.position; pos.x = x; pos.y = y; pos.z = 0; bloodText.transform.position = pos; - Vector3 sval = bloodText.transform.localScale; - sval.x = 1.0f; - sval.y = 1.0f; - sval.z = 1.0f; - bloodText.transform.localScale = sval; - - bloodText.text = text; - this.TextMove(bloodText,crit ); + Sequence sequence = DOTween.Sequence(); + bloodText.color = new Color(1f, 1f, 1f, 0.8f); + sequence.Join(DOTween.To(() => bloodText.transform.position, (Vector3 v) => bloodText.transform.position = v, + new Vector3(bloodText.transform.position.x + 20, bloodText.transform.position.y + 80, bloodText.transform.position.z), 0.2f)); + sequence.Append(DOTween.To(() => bloodText.color, (Color v) => bloodText.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart)); + sequence.Append(DOTween.To(() => bloodText.color, (Color v) => bloodText.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).SetDelay(0.5f)); + sequence.AppendCallback(() => { DestroyWord(); }); } /// <summary> - /// 清空当前的DoTweenMove数据并把数据放到Pool中. + /// 减速飘字 /// </summary> - protected void Remove() + /// <param name="x"></param> + /// <param name="y"></param> + public void FloatSlowDownWord(float x, float y) { - Poolable.TryPool(gameObject); + Vector3 pos = SlowDownWord.transform.position; + pos.x = x; + pos.y = y; + pos.z = 0; + SlowDownWord.transform.position = pos; + + Sequence sequence = DOTween.Sequence(); + SlowDownWord.color = new Color(1f, 1f, 1f, 0.8f); + sequence.Join(DOTween.To(() => SlowDownWord.transform.position, (Vector3 v) => SlowDownWord.transform.position = v, + new Vector3(SlowDownWord.transform.position.x + 50 + UnityEngine.Random.Range(-15, 15), SlowDownWord.transform.position.y + 50 + UnityEngine.Random.Range(-15, 15), SlowDownWord.transform.position.z), 0.2f)); + sequence.Append(DOTween.To(() => SlowDownWord.color, (Color v) => SlowDownWord.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart)); + sequence.Append(DOTween.To(() => SlowDownWord.color, (Color v) => SlowDownWord.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).SetDelay(0.5f)); + sequence.AppendCallback(() => { DestroyWord(); }); } - private void TextMove( Graphic graphic,bool crit = false ) + public void FloatCritWord(float x, float y) + { + Vector3 pos = CritWord.transform.position; + pos.x = x; + pos.y = y; + pos.z = 0; + CritWord.transform.position = pos; + + Sequence sequence = DOTween.Sequence(); + CritWord.color = new Color(1f, 1f, 1f, 0.8f); + sequence.Join(DOTween.To(() => CritWord.transform.position, (Vector3 v) => CritWord.transform.position = v, + new Vector3(CritWord.transform.position.x + 65, CritWord.transform.position.y + 25, CritWord.transform.position.z), 0.2f)); + sequence.Append(DOTween.To(() => CritWord.color, (Color v) => CritWord.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart)); + sequence.Append(DOTween.To(() => CritWord.color, (Color v) => CritWord.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).SetDelay(0.5f)); + sequence.AppendCallback(() => { DestroyWord(); }); + } + + private void WordMove(Graphic graphic, bool crit = false) { //获得Text的rectTransform,和颜色,并设置颜色微透明 RectTransform rect = graphic.rectTransform; @@ -75,12 +111,12 @@ float baseTime = 0.3f; if (crit) baseTime = 0.2f; - float scaleUp = 1.8f; + float scaleUp = 1.8f * scaleOffect; if (crit) - scaleUp = 2.2f; + scaleUp = 2.2f * scaleOffect; float scaleVec = Screen.height / 2400f; - int basey = rd.Next( (int)(100*scaleVec),(int)(180*scaleVec) ); - if( crit ) + int basey = rd.Next((int)(100 * scaleVec), (int)(180 * scaleVec)); + if (crit) basey = rd.Next((int)(150 * scaleVec), (int)(210 * scaleVec)); int basex; @@ -91,7 +127,75 @@ Tweener textMove01 = rect.DOMoveY(rect.position.y + basey, baseTime); Tweener textMovex = rect.DOMoveX(rect.position.x + basex, baseTime); - Tweener textMove02 = rect.DOMoveY(rect.position.y + basey + (int)(60*scaleVec), baseTime); + Tweener textMove02 = rect.DOMoveY(rect.position.y + basey + (int)(60 * scaleVec), baseTime); + Tweener textColor01 = graphic.DOColor(new Color(color.r, color.g, color.b, 1), baseTime); + Tweener textColor02 = graphic.DOColor(new Color(color.r, color.g, color.b, 0), baseTime); + Tweener textScale = rect.DOScale(scaleUp, 0.25f); + + //Append 追加一个队列,Join 添加一个队列 + //中间间隔一秒 + //Append 再追加一个队列,再Join 添加一个队列 + textMoveSequence.Append(textMove01); + textMoveSequence.Join(textMovex); + textMoveSequence.Join(textColor01); + // 中断一下. + textMoveSequence.AppendInterval(0.3f + (float)rd.NextDouble() * 0.3f); + // 向上变大淡出 + textMoveSequence.Append(textMove02); + textMoveSequence.Join(textColor02); + textMoveSequence.Join(textScale); + textMoveSequence.AppendCallback(DestroyWord); + } + + protected void DestroyWord() + { + Destroy(gameObject); + } + + /// <summary> + /// 清空当前的DoTweenMove数据并把数据放到Pool中. + /// </summary> + protected void Remove() + { + Poolable.TryPool(gameObject); + } + + private void TextMove(Graphic graphic, bool crit = false) + { + //获得Text的rectTransform,和颜色,并设置颜色微透明 + RectTransform rect = graphic.rectTransform; + + Color color = graphic.color; + + graphic.color = new Color(color.r, color.g, color.b, 0); + + //设置一个DOTween队列 + Sequence textMoveSequence = DOTween.Sequence(); + + System.Random rd = new System.Random(); + + + //设置Text移动和透明度的变化值\ + float baseTime = 0.3f; + if (crit) + baseTime = 0.2f; + float scaleUp = 1.8f * scaleOffect; + if (crit) + scaleUp = 2.2f * scaleOffect; + float scaleVec = Screen.height / 2400f; + int basey = rd.Next((int)(100 * scaleVec), (int)(180 * scaleVec)); + if (crit) + basey = rd.Next((int)(150 * scaleVec), (int)(210 * scaleVec)); + + int basex; + if (crit) + basex = rd.Next(-30, 30); + else + basex = rd.Next(35, 55); + + Tweener textMove01 = rect.DOMoveY(rect.position.y + basey, baseTime); + Tweener textMovex = rect.DOMoveX(rect.position.x + basex, baseTime); + Tweener textMove02 = rect.DOMoveY(rect.position.y + basey + (int)(60 * scaleVec), baseTime); Tweener textColor01 = graphic.DOColor(new Color(color.r, color.g, color.b, 1), baseTime); Tweener textColor02 = graphic.DOColor(new Color(color.r, color.g, color.b, 0), baseTime); Tweener textScale = rect.DOScale(scaleUp, 0.25f); @@ -109,6 +213,6 @@ textMoveSequence.Join(textColor02); textMoveSequence.Join(textScale); textMoveSequence.AppendCallback(Remove); - + } } -- Gitblit v1.9.1