using Games.LogicObj; using Games.Scene; using GCGame.Table; using UnityEngine; using UnityEngine.UI; /// /// 通用显示在WorldUiRoot层的小文字 /// public class AnchoredText : WorldUIItem { private WorldUIRoot.AnchoredTextData _data; private bool _objExist; private float _height; private Text _text; private Vector3 _worldPosition; public override WorldUIRoot.WorldUiItemType itemType { get { return WorldUIRoot.WorldUiItemType.AnchorText; } } public static UIPathData PathData { get { return UIInfo.AnchoredText; } } public override UIPathData uiPathData { get { return PathData; } } // 在世界坐标系的位置 public override Vector3 worldPosition { get { return _worldPosition; } } // 在Ui坐标系下尺寸;认为Ui坐标系尺寸单位为标准像素尺寸 public override float pixelWidth { get { return rectTransform.rect.width; } } public override bool CheckDuration() { var result = Time.unscaledTime < _data.endTime; if (result) _text.text = Mathf.FloorToInt(_data.endTime - Time.unscaledTime).ToString(); return result; } public override bool CheckPositionValid() { // Hack:这个位置是最早获得CameraPosUpdate的; var obj = ObjManager.Instance.FindObjCharacterInScene(_data.objId); if (obj != null && obj.BaseAttr != null && obj.BaseAttr.RoleData != null) { if (!_objExist) { var charModel = TableManager.GetCharModelByID(obj.BaseAttr.RoleData.CharModelID, 0); if (charModel != null) { _height = charModel == null ? 0f : charModel.HeadInfoHeight; _objExist = true; } } } else _objExist = false; if (_objExist) { _text.enabled = true; _worldPosition = obj.Position; _worldPosition += new Vector3(0f, _height); } else _text.enabled = false; return true; } public void SetInitData(WorldUIRoot.AnchoredTextData data) { _data = data; _objExist = false; } protected override void Awake() { base.Awake(); _text = rectTransform.GetComponent(); } public override void SetPositionAndScale(Vector3 position, float scale) { base.SetPositionAndScale(position + Vector3.up * 40f, scale); } }