public void Prepare(bool force = false) { if (m_Prepare && !force) { return; } m_Prepare = true; using (var elementsScope = ViewUtil.UseElementList()) { var elements = elementsScope.List; GetComponentsInChildren(true, elements); if (m_LightBinds != null) { foreach (var lightBind in m_LightBinds) { elements.Add(lightBind.Resolve()); } } using (var viewListScope = ViewUtil.UseViewList()) { var viewList = viewListScope.List; GetComponentsInChildren(true, viewList); foreach (var view in viewList) { var viewComponent = view as View; if (viewComponent == this) { continue; } view.Prepare(); using (var childElementsScope = ViewUtil.UseElementList()) { var childElements = childElementsScope.List; view.GetElements(childElements); foreach (var remove in childElements) { elements.Remove(remove); } } } } m_Elements = elements.ToArray(); } }