#if UNITY_EDITOR using UnityEditor; #endif namespace UnityEngine.Rendering.HighDefinition { /// /// Volume debug settings. /// public partial class HDVolumeDebugSettings : VolumeDebugSettings { /// Selected camera volume stack. public override VolumeStack selectedCameraVolumeStack { get { Camera cam = selectedCamera; if (cam == null) return null; var stack = HDCamera.GetOrCreate(cam).volumeStack; return stack ?? VolumeManager.instance.stack; } } /// Selected camera volume layer mask. public override LayerMask selectedCameraLayerMask { get { if (selectedCamera != null) { #if UNITY_EDITOR // For scene view, use main camera volume layer mask. See HDCamera.cs if (selectedCamera == SceneView.lastActiveSceneView.camera) { var mainCamera = Camera.main; if (mainCamera != null && mainCamera.TryGetComponent(out var sceneCameraAdditionalCameraData)) return sceneCameraAdditionalCameraData.volumeLayerMask; return HDCamera.GetSceneViewLayerMaskFallback(); } #endif if (selectedCamera.TryGetComponent(out var selectedCameraAdditionalData)) return selectedCameraAdditionalData.volumeLayerMask; } return 1; // "Default" } } /// Selected camera volume position. public override Vector3 selectedCameraPosition { get { Camera cam = selectedCamera; if (cam == null) return Vector3.zero; var anchor = HDCamera.GetOrCreate(cam).volumeAnchor; if (anchor == null) // means the hdcamera has not been initialized { // So we have to update the stack manually if (cam.TryGetComponent(out var data)) anchor = data.volumeAnchorOverride; if (anchor == null) anchor = cam.transform; var stack = selectedCameraVolumeStack; if (stack != null) VolumeManager.instance.Update(stack, anchor, selectedCameraLayerMask); } return anchor.position; } } } }