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