diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs b/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs index 884778140b7..ce2aad6b1bd 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs @@ -252,7 +252,40 @@ public void SetColumnVisibility(int index, bool visible) newVisibleColumns.Sort(); } header.state.visibleColumns = newVisibleColumns.ToArray(); + + var cols = header.state.columns; + for (int i = 0; i < cols.Length; i++) + cols[i].width = 50f; + header.ResizeToFit(); } +#else + var columns = VisibleColumns; + if (index < 0 || index > columns.Length) + return; + + columns[index] = visible; +#endif + } + + /// + /// Get column visibility. + /// + /// Index of the column. + /// True if the column is visible. + public bool GetColumnVisibility(int index) + { +#if UNITY_EDITOR + var header = Header; + if (index < 0 || index >= m_ColumnCount) + return false; + + return header.IsColumnVisible(index + 1); +#else + var columns = VisibleColumns; + if (index < 0 || index > columns.Length) + return false; + + return columns[index]; #endif } @@ -315,6 +348,41 @@ UnityEditor.IMGUI.Controls.MultiColumnHeaderState.Column CreateColumn(string nam return m_Header; } } +#else + bool[] m_Header = null; + + /// + /// The visible columns + /// + public bool[] VisibleColumns + { + get + { + if (m_Header != null) + return m_Header; + + int columnCount = 0; + if (children.Count != 0) + { + columnCount = ((Container)children[0]).children.Count; + for (int i = 1; i < children.Count; i++) + { + if (((Container)children[i]).children.Count != columnCount) + { + Debug.LogError("All rows must have the same number of children."); + return null; + } + } + } + + m_Header = new bool[columnCount]; + for (int i = 0; i < columnCount; i++) + m_Header[i] = true; + + return m_Header; + } + } +#endif /// /// Method called when a children is added. @@ -337,7 +405,6 @@ protected override void OnItemRemoved(ObservableList sender, ListChanged base.OnItemRemoved(sender, e); m_Header = null; } -#endif } } } diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUI Canvas.prefab b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUI Canvas.prefab index 7df630b35aa..314a81bbff0 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUI Canvas.prefab +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUI Canvas.prefab @@ -172,4 +172,4 @@ MonoBehaviour: prefab: {fileID: 224284813447651300, guid: 38a07789c9e87004dad98c2909f58369, type: 3} - type: UnityEngine.Rendering.DebugUI+Table+Row, Unity.RenderPipelines.Core.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - prefab: {fileID: 224053494956566916, guid: 1c87ab2ce8b8b304d98fbe9a734b1f74, type: 3} + prefab: {fileID: 224053494956566916, guid: 2d019437ff89b8d44949727731cd9357, type: 3} diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs index 83284a783e8..641a7b81040 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs @@ -141,7 +141,7 @@ public override void OnAction() valueToggle.isOn = !valueToggle.isOn; } - void UpdateColor() + internal void UpdateColor() { if (colorImage != null) colorImage.color = m_Field.GetValue(); diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs new file mode 100644 index 00000000000..473eaa55554 --- /dev/null +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs @@ -0,0 +1,81 @@ +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; + } + + /// + /// 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++) + { + var child = gameObject.transform.GetChild(1).GetChild(i).gameObject; + var active = table.GetColumnVisibility(i); + child.SetActive(active); + if (active && refreshRow) + { + if (child.TryGetComponent(out var color)) + color.UpdateColor(); + if (child.TryGetComponent(out var toggle)) + toggle.UpdateValueLabel(); + } + } + + // Update previous and next ui handlers to pass over hidden volumes + var item = gameObject.transform.GetChild(1).GetChild(0).gameObject; + var itemWidget = item.GetComponent(); + DebugUIHandlerWidget previous = null; + for (int i = 0; i < row.children.Count; i++) + { + itemWidget.previousUIHandler = previous; + if (table.GetColumnVisibility(i)) + previous = itemWidget; + + bool found = false; + for (int j = i + 1; j < row.children.Count; j++) + { + if (table.GetColumnVisibility(j)) + { + var child = gameObject.transform.GetChild(1).GetChild(j).gameObject; + var childWidget = child.GetComponent(); + itemWidget.nextUIHandler = childWidget; + item = child; + itemWidget = childWidget; + i = j - 1; + found = true; + break; + } + } + if (!found) + { + itemWidget.nextUIHandler = null; + break; + } + } + } + } +} diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs.meta b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs.meta new file mode 100644 index 00000000000..9a6c6a430a2 --- /dev/null +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4822e5675c12bf14d93b254d27ec8bd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs index 67b0fa4dac8..7feef12ef9f 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs @@ -59,7 +59,7 @@ public override void OnAction() /// /// Update the label. /// - protected virtual void UpdateValueLabel() + internal protected virtual void UpdateValueLabel() { if (valueToggle != null) valueToggle.isOn = m_Field.GetValue(); diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs index 217e290fea4..b2b2e5a499f 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs @@ -36,7 +36,7 @@ internal override void SetWidget(DebugUI.Widget widget) /// /// Update the label. /// - protected override void UpdateValueLabel() + internal protected override void UpdateValueLabel() { base.UpdateValueLabel(); DebugUI.HistoryBoolField field = m_Field as DebugUI.HistoryBoolField; diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab new file mode 100644 index 00000000000..e7db2990da6 --- /dev/null +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab @@ -0,0 +1,545 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1117777935091328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224404899962668226} + - component: {fileID: 222292134107675628} + - component: {fileID: 114934813895219466} + m_Layer: 5 + m_Name: Arrow Closed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224404899962668226 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117777935091328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224398617048880834} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 11, y: 11} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &222292134107675628 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117777935091328} + m_CullTransparentMesh: 0 +--- !u!114 &114934813895219466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117777935091328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 7a0568d5e3330b84687e307992be3030, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1157130882260826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224091637017424492} + - component: {fileID: 114246251359002098} + - component: {fileID: 114721609938004740} + - component: {fileID: 222580990534994246} + - component: {fileID: 114267363758275858} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &224091637017424492 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157130882260826} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224053494956566916} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 590, y: -50} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114246251359002098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157130882260826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 25 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 1 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &114721609938004740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157130882260826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!222 &222580990534994246 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157130882260826} + m_CullTransparentMesh: 0 +--- !u!114 &114267363758275858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157130882260826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 127279d577f25ac4ea17dae3782e5074, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1675372956212332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224861680556189892} + - component: {fileID: 222407094714348334} + - component: {fileID: 114534572167021932} + m_Layer: 5 + m_Name: Arrow Opened + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &224861680556189892 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675372956212332} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224398617048880834} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 11, y: 11} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &222407094714348334 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675372956212332} + m_CullTransparentMesh: 0 +--- !u!114 &114534572167021932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675372956212332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a674720496c1ed248a5b7ea3e22a11fd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1741108581676328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224398617048880834} + - component: {fileID: 114589844970474540} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224398617048880834 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1741108581676328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224861680556189892} + - {fileID: 224404899962668226} + - {fileID: 224133929923872250} + m_Father: {fileID: 224053494956566916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 590, y: 26} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114589844970474540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1741108581676328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e4786b5477cac0a42855b21fdaa2242f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + toggleTransition: 0 + graphic: {fileID: 0} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 0 + content: {fileID: 1157130882260826} + arrowOpened: {fileID: 1675372956212332} + arrowClosed: {fileID: 1117777935091328} +--- !u!1 &1880654171993120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224053494956566916} + - component: {fileID: 114903677526224182} + - component: {fileID: 114617406789257194} + - component: {fileID: 114488953024160460} + - component: {fileID: 114624457690215086} + m_Layer: 0 + m_Name: DebugUI Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224053494956566916 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880654171993120} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224398617048880834} + - {fileID: 224091637017424492} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 295, y: 0} + m_SizeDelta: {x: 590, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114903677526224182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880654171993120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &114617406789257194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880654171993120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!114 &114488953024160460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880654171993120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2bd470ffc0c0fe54faddbf8d466bf519, type: 3} + m_Name: + m_EditorClassIdentifier: + contentHolder: {fileID: 224091637017424492} +--- !u!114 &114624457690215086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880654171993120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4822e5675c12bf14d93b254d27ec8bd7, type: 3} + m_Name: + m_EditorClassIdentifier: + colorDefault: {r: 0.8, g: 0.8, b: 0.8, a: 1} + colorSelected: {r: 0.25, g: 0.65, b: 0.8, a: 1} + nameLabel: {fileID: 114398791307483412} + valueToggle: {fileID: 114589844970474540} +--- !u!1 &1887383709356810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224133929923872250} + - component: {fileID: 222546040197109316} + - component: {fileID: 114398791307483412} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224133929923872250 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887383709356810} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224398617048880834} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222546040197109316 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887383709356810} + m_CullTransparentMesh: 0 +--- !u!114 &114398791307483412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887383709356810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8, g: 0.8, b: 0.8, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 74a5091d8707f334b9a5c31ef71a64ba, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Foldout + +' diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab.meta b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab.meta new file mode 100644 index 00000000000..cb1351582a1 --- /dev/null +++ b/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUI Row.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d019437ff89b8d44949727731cd9357 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 2a786a8694d..49a7e0de93b 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -560,6 +560,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix spelling and grammatical errors in material samples - Fixed unneeded cookie texture allocation for cone stop lights. - Fixed scalarization code for contact shadows. +- Fixed volume debug in playmode ### Changed - Improve MIP selection for decals on Transparents diff --git a/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs b/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs index d292bea79d2..34bc9598dba 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs @@ -1267,11 +1267,17 @@ DebugUI.Widget makeWidget(string name, VolumeParameter param) var inst = (VolumeComponent)ScriptableObject.CreateInstance(type); // First row for volume info + float timer = 0.0f, refreshRate = 0.2f; var row = new DebugUI.Table.Row() { displayName = "Volume Info", children = { new DebugUI.Value() { displayName = "Interpolated Value", getter = () => { + // This getter is called first at each render + // It is used to update the volumes + if (Time.time - timer < refreshRate) + return ""; + timer = Time.deltaTime; if (data.volumeDebugSettings.selectedCameraIndex != 0) { var newVolumes = data.volumeDebugSettings.GetVolumes(); @@ -1290,6 +1296,7 @@ DebugUI.Widget makeWidget(string name, VolumeParameter param) } } } }; + row.opened = true; foreach (var volume in volumes) { diff --git a/com.unity.render-pipelines.high-definition/Runtime/Debug/VolumeDebug.cs b/com.unity.render-pipelines.high-definition/Runtime/Debug/VolumeDebug.cs index 42dbe8f99c8..9923bb4d42f 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Debug/VolumeDebug.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Debug/VolumeDebug.cs @@ -100,7 +100,8 @@ public Vector3 selectedCameraPosition if (anchor == null) // means the hdcamera has not been initialized { // So we have to update the stack manually - anchor = cam.GetComponent().volumeAnchorOverride; + if (cam.TryGetComponent(out var data)) + anchor = data.volumeAnchorOverride; if (anchor == null) anchor = cam.transform; var stack = selectedCameraVolumeStack; if (stack != null) @@ -134,7 +135,9 @@ static public List componentTypes } } - /// List of Volume component types. + /// Returns the name of a component from its VolumeComponentMenu. + /// A volume component. + /// The component display name. static public string ComponentDisplayName(Type component) { Attribute attrib = component.GetCustomAttribute(typeof(VolumeComponentMenu), false); @@ -254,9 +257,14 @@ public Volume[] GetVolumes() VolumeParameter[,] states = new VolumeParameter[volumes.Length, fields.Length]; for (int i = 0; i < volumes.Length; i++) { + var profile = volumes[i].HasInstantiatedProfile() ? volumes[i].profile : volumes[i].sharedProfile; + if (!profile.TryGet(selectedComponentType, out VolumeComponent component)) + continue; + for (int j = 0; j < fields.Length; j++) { - states[i, j] = GetParameter(volumes[i], fields[j]); + var param = GetParameter(component, fields[j]);; + states[i, j] = param.overrideState ? param : null; } } return states; @@ -294,7 +302,7 @@ public bool RefreshVolumes(Volume[] newVolumes) var newStates = GetStates(); if (savedStates == null || ChangedStates(newStates)) { - savedStates = (VolumeParameter[,])newStates.Clone(); + savedStates = newStates; ret = true; } } @@ -306,7 +314,7 @@ public bool RefreshVolumes(Volume[] newVolumes) return ret; } - /// Get the weight of a volume computed form the + /// Get the weight of a volume computed from the /// The volume to compute weight for. /// The weight of the volume. public float GetVolumeWeight(Volume volume) @@ -328,6 +336,9 @@ public float GetVolumeWeight(Volume volume) return 0f; } + /// Determines if a volume as an influence on the interpolated value + /// The volume. + /// True if the given volume as an influence. public bool VolumeHasInfluence(Volume volume) { if (weights == null)