using System; using System.Reflection; using UnityEngine; using UnityEngine.UI; namespace AlicizaX.UI.Runtime { public abstract class UIWindow : UIBase { internal void BindUIHolder(GameObject holderObject) { if (_state != UIState.CreatedUI) throw new InvalidOperationException("UI already Created"); var holder = (UIHolderObjectBase)holderObject.GetComponent(UIHolderType); if (holder == null) { throw new InvalidCastException($"资源{holderObject.name}上不存在{UIHolderType.FullName}"); } Holder = holder; _canvas = Holder.transform.GetComponent(); _raycaster = Holder.transform.GetComponent(); Holder.RectTransform.localPosition = Vector3.zero; Holder.RectTransform.pivot = new Vector2(0.5f, 0.5f); Holder.RectTransform.anchorMin = Vector2.zero; Holder.RectTransform.anchorMax = Vector2.one; Holder.RectTransform.offsetMin = Vector2.zero; Holder.RectTransform.offsetMax = Vector2.zero; Holder.RectTransform.localScale = Vector3.one; _state = UIState.Loaded; } } public abstract class UIWindow : UIWindow where T : UIHolderObjectBase { protected T baseui => (T)Holder; internal override Type UIHolderType => typeof(T); } }