static void Drawer_Environment_VolumeUpdate(UniversalRenderPipelineSerializedCamera p, Editor owner) { EditorGUI.BeginChangeCheck(); VolumeFrameworkUpdateMode prevVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue; EditorGUILayout.PropertyField(p.volumeFrameworkUpdateMode, Styles.volumeUpdates); if (EditorGUI.EndChangeCheck()) { if (p.serializedObject.targetObject is not Camera cam) { return; } VolumeFrameworkUpdateMode curVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue; cam.SetVolumeFrameworkUpdateMode(curVolumeUpdateMode); } }
/// <summary> /// Sets the VolumeFrameworkUpdateMode for the camera. /// </summary> /// <param name="camera"></param> /// <param name="mode"></param> public static void SetVolumeFrameworkUpdateMode(this Camera camera, VolumeFrameworkUpdateMode mode) { UniversalAdditionalCameraData cameraData = camera.GetUniversalAdditionalCameraData(); if (cameraData.volumeFrameworkUpdateMode == mode) { return; } cameraData.volumeFrameworkUpdateMode = mode; // We only update the local volume stacks for cameras set to ViaScripting. // Otherwise it will be updated in every frame. if (!cameraData.requiresVolumeFrameworkUpdate) { camera.UpdateVolumeStack(cameraData); } }
/// <summary> /// Sets the VolumeFrameworkUpdateMode for the camera. /// </summary> /// <param name="camera"></param> /// <param name="mode"></param> public static void SetVolumeFrameworkUpdateMode(this Camera camera, VolumeFrameworkUpdateMode mode) { UniversalAdditionalCameraData cameraData = camera.GetUniversalAdditionalCameraData(); if (cameraData.volumeFrameworkUpdateMode == mode) { return; } bool requiredUpdatePreviously = cameraData.requiresVolumeFrameworkUpdate; cameraData.volumeFrameworkUpdateMode = mode; // We only update the local volume stacks for cameras set to ViaScripting. // Otherwise it will be updated in every frame. // We also check the previous value to make sure we're not updating when // switching between Camera ViaScripting and the URP Asset set to ViaScripting if (requiredUpdatePreviously && !cameraData.requiresVolumeFrameworkUpdate) { camera.UpdateVolumeStack(cameraData); } }