123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using DG;
- using DG.Tweening;
- /// <summary>
- /// 描述:
- /// 作者:WJ
- /// </summary>
- public class HpbarTip : MonoBehaviour
- {
- public enum HpTweenType
- {
- Default, // 默认的抛物线 普通伤害
- High, // 高抛物线 速度快 弱点伤害
- Up, // 向上的 暴击 向上消失
- Down, // 向下的 抵抗 向下消失
- }
- /// <summary>
- /// 角色
- /// </summary>
- private Role mRole = null;
- /// <summary>
- /// 文字
- /// </summary>
- private Text mText = null;
- /// <summary>
- /// 自身Transform
- /// </summary>
- private RectTransform mRectTransform = null;
- /// <summary>
- /// 类型
- /// </summary>
- private int mType = 0;
- /// <summary>
- ///
- /// </summary>
- private Camera mUICamera = null;
- /// <summary>
- /// 父节点RectTransform
- /// </summary>
- private RectTransform mRootRectTransform = null;
- /// <summary>
- /// 颜色
- /// </summary>
- private Color mColor;
- /// <summary>
- /// 初始化
- /// </summary>
- public void Init(RectTransform rect, Role role, int val, HpTweenType htType, Color color, float liveTime = 1.0f)
- {
- mRootRectTransform = rect;
- mRole = role;
- mText = transform.GetComponentInChildren<Text>();
- 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);
- }
- /// <summary>
- /// 更新
- /// </summary>
- 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;
- }
- }
- /// <summary>
- /// 世界坐标转成UI坐标
- /// </summary>
- /// <param name="wpos">世界坐标</param>
- /// <returns>UI坐标</returns>
- 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);
- }
- }
|