wangguan
2020-12-23 1e192494412a34d17548834a6aff639202cdfdda
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,15 @@
{
    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()
    {
    }
    public Image FrostWord;
    public Image RestrainWord;
    private float scaleOffect = 1.5f;
    /// <summary>
    /// 当前的
@@ -29,34 +24,113 @@
    /// <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 + 70, CritWord.transform.position.y + 20, 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(); });
    }
    public void FloatFrostWord(float x, float y)
    {
        Vector3 pos = FrostWord.transform.position;
        pos.x = x;
        pos.y = y;
        pos.z = 0;
        FrostWord.transform.position = pos;
        Sequence sequence = DOTween.Sequence();
        FrostWord.color = new Color(1f, 1f, 1f, 0.8f);
        sequence.Join(DOTween.To(() => FrostWord.transform.position, (Vector3 v) => FrostWord.transform.position = v,
            new Vector3(FrostWord.transform.position.x - 50, FrostWord.transform.position.y + 50, FrostWord.transform.position.z), 0.2f));
        sequence.Append(DOTween.To(() => FrostWord.color, (Color v) => FrostWord.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart));
        sequence.Append(DOTween.To(() => FrostWord.color, (Color v) => FrostWord.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).SetDelay(1f));
        sequence.AppendCallback(() => { DestroyWord(); });
    }
    public void FloatRestrainWord(float x, float y)
    {
        Vector3 pos = RestrainWord.transform.position;
        pos.x = x;
        pos.y = y;
        pos.z = 0;
        RestrainWord.transform.position = pos;
        Sequence sequence = DOTween.Sequence();
        RestrainWord.color = new Color(1f, 1f, 1f, 0.8f);
        sequence.Join(DOTween.To(() => RestrainWord.transform.position, (Vector3 v) => RestrainWord.transform.position = v,
            new Vector3(RestrainWord.transform.position.x - 50 + UnityEngine.Random.Range(-15, 15), RestrainWord.transform.position.y + 50 + UnityEngine.Random.Range(-15, 15), RestrainWord.transform.position.z), 0.2f));
        sequence.Append(DOTween.To(() => RestrainWord.color, (Color v) => RestrainWord.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart));
        sequence.Append(DOTween.To(() => RestrainWord.color, (Color v) => RestrainWord.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 +149,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 +165,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 +251,6 @@
        textMoveSequence.Join(textColor02);
        textMoveSequence.Join(textScale);
        textMoveSequence.AppendCallback(Remove);
    }
}