using UnityEngine.UI; namespace UnityEngine.Rendering.UI { /// /// DebugUIHandler for row widget. /// public class DebugUIHandlerRow : DebugUIHandlerFoldout { float m_Timer; /// /// OnEnable implementation. /// protected override void OnEnable() { m_Timer = 0f; } GameObject GetChild(int index) { if (index < 0) return null; if (gameObject.transform != null) { var firstChild = gameObject.transform.GetChild(1); if (firstChild != null && firstChild.childCount > index) { return firstChild.GetChild(index).gameObject; } } return null; } bool TryGetChild(int index, out GameObject child) { child = GetChild(index); return child != null; } bool IsActive(DebugUI.Table table, int index, GameObject child) { if (!table.GetColumnVisibility(index)) return false; var valueChild = child.transform.Find("Value"); if (valueChild != null && valueChild.TryGetComponent(out var text)) return !string.IsNullOrEmpty(text.text); return true; } /// /// Update implementation. /// protected void Update() { var row = CastWidget(); var table = row.parent as DebugUI.Table; float refreshRate = 0.1f; bool refreshRow = m_Timer >= refreshRate; if (refreshRow) m_Timer -= refreshRate; m_Timer += Time.deltaTime; for (int i = 0; i < row.children.Count; i++) { if (!TryGetChild(i, out var child)) continue; bool active = IsActive(table, i, child); if (child != null) child.SetActive(active); if (active && refreshRow) { if (child.TryGetComponent(out var color)) color.UpdateColor(); if (child.TryGetComponent(out var toggle)) toggle.UpdateValueLabel(); if (child.TryGetComponent(out var list)) list.UpdateValueLabel(); } } // Update previous and next ui handlers to skip hidden volumes var itemWidget = GetChild(0).GetComponent(); DebugUIHandlerWidget previous = null; for (int i = 0; i < row.children.Count; i++) { itemWidget.previousUIHandler = previous; if (!TryGetChild(i, out var child)) continue; if (IsActive(table, i, child)) previous = itemWidget; bool found = false; for (int j = i + 1; j < row.children.Count; j++) { if (!TryGetChild(j, out var innerChild)) continue; if (IsActive(table, j, innerChild)) { var childWidget = child.GetComponent(); itemWidget.nextUIHandler = childWidget; itemWidget = childWidget; i = j - 1; found = true; break; } } if (!found) { itemWidget.nextUIHandler = null; break; } } } } }