using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using XericLibrary.Runtime.MacroLibrary; namespace Deconstruction.Runtime.UI { /// /// 提供ui界面上的脚本 /// public class WeaklyUIBehaviour : MonoBehaviour { #region 字段属性 /// /// 此处的矩形变换组件 /// public RectTransform rectTransform { get; private set; } /// /// 此组件所在的Canvas /// public Canvas CanvasRoot { get; private set; } /// /// 此组件所在的Canvas下的CanvasScaler /// public CanvasScaler CanvasRootScaler { get; private set; } private bool isFirstOnEnable = false; private bool isFirstOnEnableStart = false; #endregion /// /// 在加载脚本实例时调用 /// protected virtual void Awake() { rectTransform = transform as RectTransform; CanvasRoot = transform.GetParents() .Select(t => t.GetComponent()) .FirstOrDefault(a => a != null); if (CanvasRoot != null) CanvasRootScaler = CanvasRoot.GetComponent(); else { Debug.LogError($"成员{name}不是一个有效的ui成员,或没有放置在canvas上,致使其无法找到ui根组件"); } isFirstOnEnable = true; isFirstOnEnableStart = true; } protected virtual void OnEnable() { if (isFirstOnEnable) { isFirstOnEnable = false; OnFirstEnable(); } } protected virtual void OnDisable() { } /// /// 首次行为激活时调用(用于界面类型元素在运行期间首次初始化) /// protected virtual void OnFirstEnable() { } protected virtual void Start() { if (isFirstOnEnableStart) { isFirstOnEnableStart = false; OnFirstEnableStart(); } } /// /// 首次行为激活开始时调用(用于界面类型元素在运行期间首次初始化) /// protected virtual void OnFirstEnableStart() { } } }