Skip to content

Commit 24cee1c

Browse files
arttu-peltonenEvergreen
authored andcommitted
Fix unselectable None option in Rendering Debugger > Volume > Camera
1 parent 0d172bd commit 24cee1c

File tree

3 files changed

+50
-42
lines changed

3 files changed

+50
-42
lines changed

Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugState.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,35 @@ public sealed class DebugStateInt : DebugState<int> { }
182182
[Serializable, DebugState(typeof(DebugUI.ObjectPopupField), typeof(DebugUI.CameraSelector), typeof(DebugUI.ObjectField))]
183183
public sealed class DebugStateObject : DebugState<UnityEngine.Object>
184184
{
185+
[SerializeField] string m_UserData;
186+
187+
/// <inheritdoc/>
188+
public override void SetValue(object value, DebugUI.IValueField field)
189+
{
190+
// DebugStateObject is used to serialize the selected camera reference in DebugUI.CameraSelector. For SceneView Camera this doesn't work because
191+
// the camera is never saved and always recreated. So we use a special string to identify this case and restore the reference later.
192+
if (field is DebugUI.CameraSelector && SceneView.lastActiveSceneView != null && (Camera)value == SceneView.lastActiveSceneView.camera)
193+
{
194+
m_UserData = "SceneViewCamera";
195+
}
196+
else
197+
{
198+
m_UserData = null;
199+
}
200+
base.SetValue(value, field);
201+
}
202+
203+
/// <inheritdoc/>
204+
public override object GetValue()
205+
{
206+
if (value == null && m_UserData != null && m_UserData == "SceneViewCamera" && SceneView.lastActiveSceneView != null && SceneView.lastActiveSceneView.camera != null)
207+
{
208+
value = SceneView.lastActiveSceneView.camera;
209+
}
210+
211+
return base.GetValue();
212+
}
213+
185214
/// <summary>
186215
/// Returns the hash code of the Debug Item.
187216
/// </summary>

Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsVolumes.cs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,10 @@ public Type selectedComponentType
5959
/// <summary>Current camera to debug.</summary>
6060
public Camera selectedCamera
6161
{
62-
get
63-
{
64-
#if UNITY_EDITOR
65-
// By default pick the one scene camera
66-
if (m_SelectedCamera == null && SceneView.lastActiveSceneView != null)
67-
{
68-
var sceneCamera = SceneView.lastActiveSceneView.camera;
69-
if (sceneCamera != null)
70-
m_SelectedCamera = sceneCamera;
71-
}
72-
#endif
73-
74-
return m_SelectedCamera;
75-
}
62+
get => m_SelectedCamera;
7663
set
7764
{
78-
if (value != null && value != m_SelectedCamera)
65+
if (value != m_SelectedCamera)
7966
{
8067
m_SelectedCamera = value;
8168
OnSelectionChanged();
@@ -333,7 +320,7 @@ public static DebugUI.EnumField CreateComponentSelector(SettingsPanel panel, Act
333320
};
334321
}
335322

336-
public static DebugUI.ObjectPopupField CreateCameraSelector(SettingsPanel panel, Action<DebugUI.Field<Object>, Object> refresh)
323+
public static DebugUI.CameraSelector CreateCameraSelector(SettingsPanel panel, Action<DebugUI.Field<Object>, Object> refresh)
337324
{
338325
return new DebugUI.CameraSelector()
339326
{
@@ -708,7 +695,14 @@ public override void Dispose()
708695
public SettingsPanel(DebugDisplaySettingsVolume data)
709696
: base(data)
710697
{
711-
AddWidget(WidgetFactory.CreateCameraSelector(this, (_, __) => Refresh()));
698+
var cameraSelector = WidgetFactory.CreateCameraSelector(this, (_, __) => Refresh());
699+
700+
// Select first camera if none is selected
701+
var availableCameras = cameraSelector.getObjects() as List<Camera>;
702+
if (data.selectedCamera == null && availableCameras is { Count: > 0 })
703+
data.selectedCamera = availableCameras[0];
704+
705+
AddWidget(cameraSelector);
712706
AddWidget(WidgetFactory.CreateComponentSelector(this, (_, __) => Refresh()));
713707

714708
Func<bool> hiddenCallback = () => data.selectedCamera == null || data.selectedComponent <= 0;

Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplaySettingsCamera.cs

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,8 @@ class DebugDisplaySettingsCamera : IDebugDisplaySettingsData
1010
[Serializable]
1111
public class FrameSettingsDebugData
1212
{
13-
private Camera m_SelectedCamera;
14-
public Camera selectedCamera
15-
{
16-
get
17-
{
18-
#if UNITY_EDITOR
19-
if (m_SelectedCamera == null && UnityEditor.SceneView.lastActiveSceneView != null)
20-
{
21-
var sceneCamera = UnityEditor.SceneView.lastActiveSceneView.camera;
22-
if (sceneCamera != null)
23-
m_SelectedCamera = sceneCamera;
24-
}
25-
#endif
26-
return m_SelectedCamera;
27-
}
28-
set
29-
{
30-
if (value != null && value != m_SelectedCamera)
31-
{
32-
m_SelectedCamera = value;
33-
}
34-
}
35-
}
13+
public Camera selectedCamera { get; set; }
14+
3615
public Dictionary<Camera, (HDAdditionalCameraData, IDebugData)> registeredCameras = new ();
3716
}
3817

@@ -98,8 +77,8 @@ public static DebugUI.CameraSelector CreateCameraSelector(SettingsPanel panel,
9877
getter = () => panel.data.frameSettingsData.selectedCamera,
9978
setter = value =>
10079
{
101-
if (value is Camera cam && value != panel.data.frameSettingsData.selectedCamera)
102-
panel.data.frameSettingsData.selectedCamera = cam;
80+
if (value != panel.data.frameSettingsData.selectedCamera)
81+
panel.data.frameSettingsData.selectedCamera = value as Camera;
10382
},
10483
onValueChanged = refresh
10584
};
@@ -134,6 +113,12 @@ public SettingsPanel(DebugDisplaySettingsCamera data)
134113
: base(data)
135114
{
136115
m_CameraSelector = WidgetFactory.CreateCameraSelector(this, (_, __) => Refresh());
116+
117+
// Select first camera if none is selected
118+
var availableCameras = m_CameraSelector.getObjects() as List<Camera>;
119+
if (data.frameSettingsData.selectedCamera == null && availableCameras is { Count: > 0 })
120+
data.frameSettingsData.selectedCamera = availableCameras[0];
121+
137122
AddWidget(m_CameraSelector);
138123

139124
if (GetOrCreateFrameSettingsWidgets(out var frameSettingsWidgets))

0 commit comments

Comments
 (0)