/// <summary> /// 指定したLayoutTargetComponentに関係するLayoutTargetを全て更新する。 /// /// 更新対象は以下のものになります。 /// - targetが所属しているGameObject階層の中でLayoutTargetComponentがアタッチされているGameObject階層以下の全LayoutTargetComponent /// </summary> /// <param name="target"></param> public static void UpdateLayoutHierachy(LayoutTargetComponent target) { var root = target.transform.GetParentEnumerable() .Select(_p => _p.GetComponent <LayoutTargetComponent>()) .LastOrDefault(_p => _p != null); if (root == null) { root = target; } var layoutTargets = root.transform.GetHierarchyEnumerable() .Select(_t => _t.GetComponent <LayoutTargetComponent>()) .Where(_t => _t != null); foreach (var t in layoutTargets) { t.LayoutTarget.IsAutoUpdate = false; } foreach (var t in layoutTargets) { LayoutTargetComponentEditor.UpdateSelf(t); } }
static Vector3 GetAnchorAreaSize(LayoutTargetComponent layoutTargetComponent) { if (layoutTargetComponent.LayoutTarget.Parent == null) { var parent = layoutTargetComponent.transform.parent; if (parent.TryGetComponent <LayoutTargetComponent>(out var parentLayoutTarget)) { layoutTargetComponent.LayoutTarget.SetParent(parentLayoutTarget.LayoutTarget); return(layoutTargetComponent.LayoutTarget.AnchorAreaSize()); } else if (parent.transform is RectTransform) { var parentR = parent.transform as RectTransform; var self = layoutTargetComponent.LayoutTarget; return(parentR.rect.size.Mul(self.AnchorMax - self.AnchorMin)); } else { return(Vector3.zero); } } else { return(layoutTargetComponent.LayoutTarget.AnchorAreaSize()); } }
public static void UpdateSelf(LayoutTargetComponent t) { t.LayoutTarget.IsAutoUpdate = false; t.AutoDetectUpdater(); t.UpdateLayoutTargetHierachy(); t.LayoutTarget.FollowParent(); t.LayoutTarget.ClearLayouts(); foreach (var layout in t.GetComponents <ILayoutComponent>()) { t.LayoutTarget.AddLayout(layout.LayoutInstance); } foreach (var layout in t.LayoutTarget.Layouts) { layout.UpdateLayout(); } t.CopyToTransform(); }
static Vector3 GetLayoutSize(LayoutTargetComponent layoutTargetComponent) { var self = layoutTargetComponent.LayoutTarget; var localSize = Vector3.zero; if (layoutTargetComponent.LayoutTarget.Parent == null) { var parent = layoutTargetComponent.transform.parent; if (parent == null) { } else if (parent.TryGetComponent <LayoutTargetComponent>(out var parentLayoutTarget)) { localSize = parentLayoutTarget.LayoutTarget.LocalSize; } else if (parent.transform is RectTransform) { var parentR = parent.transform as RectTransform; localSize = parentR.rect.size; } } else { localSize = layoutTargetComponent.LayoutTarget.Parent.LocalSize; } if (self.LayoutInfo.LayoutSize.x >= 0) { localSize.x = Mathf.Min(localSize.x, self.LayoutInfo.LayoutSize.x); } if (self.LayoutInfo.LayoutSize.y >= 0) { localSize.y = Mathf.Min(localSize.y, self.LayoutInfo.LayoutSize.y); } if (self.LayoutInfo.LayoutSize.z >= 0) { localSize.z = Mathf.Min(localSize.z, self.LayoutInfo.LayoutSize.z); } return(localSize); }
static LayoutTargetObject GetParentLayoutTarget(LayoutTargetComponent layoutTargetComponent) { if (layoutTargetComponent.LayoutTarget.Parent == null) { var parent = layoutTargetComponent.transform.parent; if (parent.TryGetComponent <LayoutTargetComponent>(out var parentLayoutTarget)) { return(parentLayoutTarget.LayoutTarget); } else if (parent.transform is RectTransform) { var parentR = parent.transform as RectTransform; return(LayoutTargetComponent.RectTransformUpdater.Create(parentR) as LayoutTargetObject); } else { return(null); } } else { return(layoutTargetComponent.LayoutTarget.Parent as LayoutTargetObject); } }