using UnityEngine; using System.Collections; using Thousandto.Code.Center; using Thousandto.Plugins.Common; using Thousandto.Code.Logic; using System.Collections.Generic; using Thousandto.Core.Asset; using System; using Thousandto.Core.Base; namespace Thousandto.GameUI.Form { //UI闪光控件,一条白光在某个UI上的移动效果 public class UIBlinkCompoent: MonoBehaviour { #region//私有变量 //根节点 private UIPanel _rootPanel = null; //移动的对象 private UIWidget _widget = null; private Transform _moveTrans = null; private GameObject _moveGo = null; //移动开始位置 private Vector2 _startPos = Vector2.zero; //移动结束位置 private Vector2 _endPos = Vector2.zero; //移动方向 private UIBlinkMoveDir _moveDir = UIBlinkMoveDir.LeftToRight; //时间计数器 private float _moveTimer = 0f; //单次移动时间 private float _maxMoveTime = 1f; //每次移动间隔时间 private float _intervalTime = 0f; //是否正在移动 private bool _isMoveing = true; #endregion #region//属性 public UIBlinkMoveDir MoveDir { get { return _moveDir; } set { if(_moveDir != value) { _moveDir = value; _isMoveing = false; Play(); } } } public float MoveTime { get { return _maxMoveTime; } set { _maxMoveTime = value; } } public float IntervalTime { get { return _intervalTime; } set { _intervalTime = value; } } //根节点 public UIPanel RootPanel { get { return _rootPanel; } } #endregion #region//共有函数 public void Play() { FindRes(); _moveTimer = 0f; var region = _rootPanel.finalClipRegion; var left = region.x - (region.z / 2) - (_widget.width / 2); var right = region.x + (region.z / 2) + (_widget.width / 2); var top = region.y + (region.w / 2) + (_widget.height / 2); var bottom = region.y - (region.w / 2) - (_widget.height / 2); switch(_moveDir) { case UIBlinkMoveDir.LeftToRight: { _startPos = new Vector2(left, region.y); _endPos = new Vector2(right, region.y); } break; case UIBlinkMoveDir.RightRoLeft: { _startPos = new Vector2(right, region.y); _endPos = new Vector2(left, region.y); } break; case UIBlinkMoveDir.TopToBottom: { _startPos = new Vector2(region.x, top); _endPos = new Vector2(region.x, bottom); } break; case UIBlinkMoveDir.BottomToTop: { _startPos = new Vector2(region.x, bottom); _endPos = new Vector2(region.x, top); } break; } _isMoveing = true; _moveGo.SetActive(true); } public void Stop() { FindRes(); _isMoveing = false; _moveGo.SetActive(false); } public void SetSize(int width, int height) { if(_rootPanel != null) { var region = new Vector4(_rootPanel.baseClipRegion.x, _rootPanel.baseClipRegion.y, width, height); _rootPanel.baseClipRegion = region; Play(); } } #endregion #region//私有函数 private void Awake() { FindRes(); if(_isMoveing) { _isMoveing = false; Play(); } } private void FindRes() { if(_rootPanel == null) { _rootPanel = GetComponent<UIPanel>(); } if(_widget == null) { _widget = transform.Find("MoveRoot").GetComponent<UIWidget>(); _moveTrans = _widget.transform; _moveGo = _widget.gameObject; } } private void Update() { if(_isMoveing) { _moveTimer += Time.deltaTime; var curTime = _moveTimer % (_maxMoveTime + _intervalTime); if(curTime <= _maxMoveTime) { _moveGo.SetActive(true); var lerpValue = curTime / _maxMoveTime; _moveTrans.localPosition = Vector2.Lerp(_startPos, _endPos, lerpValue); } else { _moveGo.SetActive(false); } } } #endregion } }