using Core.Utilities;
|
using DG.Tweening;
|
using TMPro;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class TextMoveDoTween : MonoBehaviour
|
{
|
public TextMeshProUGUI bloodText;
|
|
public Image SlowDownWord;
|
|
public Image CritWord;
|
|
public Image FrostWord;
|
|
public Image RestrainWord;
|
|
private float scaleOffect = 1.5f;
|
|
/// <summary>
|
/// 当前的
|
/// </summary>
|
/// <param name="x"></param>
|
/// <param name="y"></param>
|
/// <param name="text"></param>
|
public void moveBloodText(float x, float y, string text, bool crit = false)
|
{
|
// // 先设置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;
|
|
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>
|
/// 减速飘字
|
/// </summary>
|
/// <param name="x"></param>
|
/// <param name="y"></param>
|
public void FloatSlowDownWord(float x, float y)
|
{
|
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(); });
|
}
|
|
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(1f));
|
sequence.AppendCallback(() => { DestroyWord(); });
|
}
|
|
private void WordMove(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);
|
|
//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);
|
|
//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(Remove);
|
|
}
|
}
|