///<summary> /// 获取具有给定RectTransform的布局元素的计算布局属性 ///</summary> ///<param name="rect">布局元素的RectTransform,用于获取。</param> ///<param name="property">要计算的属性。</param> ///<param name="defaultValue">如果布局元素上没有组件提供给定属性,则使用的默认值</param> ///<param name="source">可选的out参数,用于获取提供计算值的组件。</param> ///<returns> layout属性的计算值。</returns> publicstaticfloat GetLayoutPropertypublic staticfloatGetLayoutProperty(RectTransform rect, System.Func<ILayoutElement, float> property, float defaultValue, out ILayoutElement source) { source = null; if (rect == null) return0; float min = defaultValue; int maxPriority = System.Int32.MinValue; var components = ListPool<Component>.Get(); rect.GetComponents(typeof(ILayoutElement), components);
for (int i = 0; i < components.Count; i++) { var layoutComp = components[i] as ILayoutElement; if (layoutComp is Behaviour && !((Behaviour)layoutComp).isActiveAndEnabled) continue;
int priority = layoutComp.layoutPriority; // 如果这个布局组件的优先级低于先前使用的组件,忽略它 if (priority < maxPriority) continue; float prop = property(layoutComp); // 如果此布局属性设置为负值,则意味着应该忽略它 if (prop < 0) continue;