#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;
}
}
}
}