@@ -272,12 +272,6 @@ public partial class DebugDisplaySettings : IDebugData
272272 static GUIContent [ ] s_RenderingMipmapDebugMaterialTextureSlotStrings = null ;
273273 static int [ ] s_RenderingMipmapDebugMaterialTextureSlotValues = null ;
274274
275- static List < GUIContent > s_CameraNames = new List < GUIContent > ( ) { new ( "None" ) } ;
276- static GUIContent [ ] s_CameraNamesStrings = { new ( "No Visible Camera" ) } ;
277- static int [ ] s_CameraNamesValues = { 0 } ;
278-
279- static bool needsRefreshingCameraFreezeList = true ;
280-
281275#if ENABLE_NVIDIA && ENABLE_NVIDIA_MODULE
282276 internal UnityEngine . NVIDIA . DebugView nvidiaDebugView { get ; } = new UnityEngine . NVIDIA . DebugView ( ) ;
283277#endif
@@ -339,8 +333,64 @@ public partial class DebugData
339333 public bool countRays = false ;
340334 /// <summary>Display Show Lens Flare Data Driven Only.</summary>
341335 public bool showLensFlareDataDrivenOnly = false ;
336+
337+ private static Camera [ ] GetAvailableDebuggableCameras ( )
338+ {
339+ using ( ListPool < Camera > . Get ( out var tmp ) )
340+ {
341+
342+ #if UNITY_EDITOR
343+ if ( UnityEditor . SceneView . lastActiveSceneView != null )
344+ {
345+ var sceneCamera = UnityEditor . SceneView . lastActiveSceneView . camera ;
346+ if ( sceneCamera != null )
347+ tmp . Add ( sceneCamera ) ;
348+ }
349+ #endif
350+
351+ var cameraArray = new Camera [ Camera . allCamerasCount ] ;
352+ Camera . GetAllCameras ( cameraArray ) ;
353+
354+ foreach ( var camera in cameraArray )
355+ {
356+ if ( camera == null )
357+ continue ;
358+
359+ if ( camera . cameraType != CameraType . Preview && camera . cameraType != CameraType . Reflection )
360+ {
361+ if ( camera . TryGetComponent < IAdditionalData > ( out _ ) )
362+ tmp . Add ( camera ) ;
363+ }
364+ }
365+
366+ return tmp . ToArray ( ) ;
367+ }
368+ }
369+
342370 /// <summary>Index of the camera to freeze for visibility.</summary>
343- public int debugCameraToFreeze = 0 ;
371+ public int debugCameraToFreeze
372+ {
373+ get
374+ {
375+ var cameras = GetAvailableDebuggableCameras ( ) ;
376+ if ( cameras == null || cameras . Length == 0 || selectedCameraToFreeze == null )
377+ return - 1 ;
378+
379+ return Array . IndexOf ( cameras , selectedCameraToFreeze ) ;
380+ }
381+ set
382+ {
383+ var cameras = GetAvailableDebuggableCameras ( ) ;
384+ if ( value < 0 || value >= cameras . Length )
385+ selectedCameraToFreeze = null ;
386+ else
387+ selectedCameraToFreeze = cameras [ value ] ;
388+ }
389+ }
390+
391+ /// <summary>The camera to freeze for visibility.</summary>
392+ public Camera selectedCameraToFreeze ;
393+
344394 internal RTASDebugView rtasDebugView = RTASDebugView . Shadows ;
345395 internal RTASDebugMode rtasDebugMode = RTASDebugMode . InstanceID ;
346396 internal VolumetricCloudsDebug volumetricCloudDebug = VolumetricCloudsDebug . Lighting ;
@@ -680,7 +730,7 @@ public ColorPickerDebugMode GetDebugColorPickerMode()
680730 /// <returns>True if camera visibility is frozen</returns>
681731 public bool IsCameraFreezeEnabled ( )
682732 {
683- return data . debugCameraToFreeze != 0 ;
733+ return data . selectedCameraToFreeze != null ;
684734 }
685735
686736 /// <summary>
@@ -690,7 +740,7 @@ public bool IsCameraFreezeEnabled()
690740 /// <returns>True if a specific camera is frozen for visibility.</returns>
691741 public bool IsCameraFrozen ( Camera camera )
692742 {
693- return IsCameraFreezeEnabled ( ) && camera . name . Equals ( s_CameraNamesStrings [ data . debugCameraToFreeze ] . text ) ;
743+ return IsCameraFreezeEnabled ( ) && camera == data . selectedCameraToFreeze ;
694744 }
695745
696746 /// <summary>
@@ -1974,7 +2024,14 @@ void RegisterRenderingDebug()
19742024 } ) ;
19752025 }
19762026
1977- renderingSettings . children . Add ( new DebugUI . EnumField { nameAndTooltip = RenderingStrings . FreezeCameraForCulling , getter = ( ) => data . debugCameraToFreeze , setter = value => data . debugCameraToFreeze = value , enumNames = s_CameraNamesStrings , enumValues = s_CameraNamesValues , getIndex = ( ) => data . debugCameraToFreezeEnumIndex , setIndex = value => data . debugCameraToFreezeEnumIndex = value } ) ;
2027+ var freezeCameraForCullingSelector = new DebugUI . CameraSelector ( )
2028+ {
2029+ nameAndTooltip = RenderingStrings . FreezeCameraForCulling ,
2030+ getter = ( ) => data . selectedCameraToFreeze ,
2031+ setter = value => data . selectedCameraToFreeze = value as Camera
2032+ } ;
2033+
2034+ renderingSettings . children . Add ( freezeCameraForCullingSelector ) ;
19782035
19792036 renderingSettings . children . Add ( new DebugUI . Container
19802037 {
@@ -2228,19 +2285,6 @@ internal void UpdateMaterials()
22282285 }
22292286 }
22302287
2231- internal void UpdateCameraFreezeOptions ( )
2232- {
2233- if ( needsRefreshingCameraFreezeList )
2234- {
2235- s_CameraNamesStrings = s_CameraNames . ToArray ( ) ;
2236- s_CameraNamesValues = Enumerable . Range ( 0 , s_CameraNames . Count ( ) ) . ToArray ( ) ;
2237-
2238- UnregisterRenderingDebug ( ) ;
2239- RegisterRenderingDebug ( ) ;
2240- needsRefreshingCameraFreezeList = false ;
2241- }
2242- }
2243-
22442288 internal bool DebugHideSky ( HDCamera hdCamera )
22452289 {
22462290 return ( IsMatcapViewEnabled ( hdCamera ) ||
0 commit comments