using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG; using DG.Tweening; /// /// 描述: /// 作者:WJ /// public class HpbarTip : MonoBehaviour { public enum HpTweenType { Default, // 默认的抛物线 普通伤害 High, // 高抛物线 速度快 弱点伤害 Up, // 向上的 暴击 向上消失 Down, // 向下的 抵抗 向下消失 } /// /// 角色 /// private Role mRole = null; /// /// 文字 /// private Text mText = null; /// /// 自身Transform /// private RectTransform mRectTransform = null; /// /// 类型 /// private int mType = 0; /// /// /// private Camera mUICamera = null; /// /// 父节点RectTransform /// private RectTransform mRootRectTransform = null; /// /// 颜色 /// private Color mColor; /// /// 初始化 /// public void Init(RectTransform rect, Role role, int val, HpTweenType htType, Color color, float liveTime = 1.0f) { mRootRectTransform = rect; mRole = role; mText = transform.GetComponentInChildren(); mRectTransform = transform as RectTransform; mColor = color; mText.color = color; mText.text = val.ToString(); mText.rectTransform.localScale = Vector3.one; mRectTransform.anchoredPosition = World2UI(mRole.transform.position + Vector3.up * 2) + Vector2.right * mText.preferredWidth * 0.5f; TweenFuncitonByType(htType); Destroy(gameObject, liveTime); } /// /// 更新 /// private void FixedUpdate() { //if (mText != null && mRectTransform != null) //{ // mColor.a -= Time.deltaTime * 0.33f; // mText.color = mColor; // mRectTransform.anchoredPosition3D += Vector3.up * Time.deltaTime * Screen.height * 0.2f; //} } private void TweenFuncitonByType(HpTweenType htType) { Sequence s = DOTween.Sequence(); switch (htType) { case HpTweenType.Default: mText.rectTransform.DOScale(1, 1.0f); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 10), 0.3f).SetEase(Ease.OutCirc)); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 4), 0.7f).SetEase(Ease.Linear)); s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc)); s.PlayForward(); break; case HpTweenType.High: mText.rectTransform.DOScale(1.5f, 0.2f); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 0.3f).SetEase(Ease.OutCirc)); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 0.7f).SetEase(Ease.Linear)); s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc)); s.PlayForward(); break; case HpTweenType.Up: mText.rectTransform.DOScale(2f, 0.3f); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 1)); s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc)); break; case HpTweenType.Down: mText.rectTransform.DOScale(1.3f, 0.3f); s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 1)); s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc)); break; } } /// /// 世界坐标转成UI坐标 /// /// 世界坐标 /// UI坐标 public Vector2 World2UI(Vector3 wpos) { if(Camera.main == null) { return Vector2.zero; } //世界坐标 -> ViewPort坐标 Vector2 viewPos = Camera.main.WorldToViewportPoint(wpos); //ViewPort坐标 -> UGUI坐标  return new Vector2(mRootRectTransform.rect.width * viewPos.x, mRootRectTransform.rect.height * viewPos.y); } }