using UnityEngine; public class UITweenAlpha : MonoBehaviour { public delegate void FinishCallBack(UITweenAlpha in_FadeObject); public AnimationCurve _curve; public bool _autoStart; public float _from; public float _to; public float _delayTime; public float _endTime; public bool _loop; public UITweenAlpha[] LinkTargets; private UIPanel _panel; private UIWidget _uiWidget; private UIRect _rect; private bool _isPlay; private bool _isEnd; private bool _isPlayFoward; private bool _initialized; public FinishCallBack _finishCallBack { get; set; } public float Timer { get; set; } private void Awake() { if (!_initialized) { Initialize(); } } private void Initialize() { _initialized = true; _panel = base.gameObject.GetComponent(); if (_panel != null) { _rect = _panel; } else { _uiWidget = base.gameObject.GetComponent(); if (_uiWidget == null && _panel == null) { _uiWidget = base.gameObject.AddComponent(); } _rect = _uiWidget; } if (_autoStart) { PlayForward(isReset: true); } if (LinkTargets == null) { return; } for (int i = 0; i < LinkTargets.Length; i++) { if (LinkTargets[i].isActiveAndEnabled) { Timer = LinkTargets[i].Timer; break; } } } public void PlayForward(bool isReset = false) { if (!base.gameObject.activeSelf) { return; } if (!_initialized) { Initialize(); } if (_curve == null) { return; } _isPlayFoward = true; if (isReset) { _rect.alpha = _from; } if (!_loop) { if (_rect.alpha != _to || isReset) { _isPlay = true; Timer = 0f; } else { _isEnd = true; } } else { _isPlay = true; Timer = 0f; } } public void End() { if (_isPlay) { _isPlay = false; if (_finishCallBack != null) { _finishCallBack(this); } } } }