diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index c85737efcae..4910e3e9b11 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -138,6 +138,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed Decal's UV edit mode with negative UV - Fixed issue with the color space of AOVs (case 1324759) - Fixed issue with history buffers when using multiple AOVs (case 1323684). +- Fixed camera preview with multi selection (case 1324126). ### Changed - Changed Window/Render Pipeline/HD Render Pipeline Wizard to Window/Rendering/HDRP Wizard diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.Handlers.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.Handlers.cs index 2be99125948..db52abd15b3 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.Handlers.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.Handlers.cs @@ -28,20 +28,32 @@ void OnOverlayGUI(Object target, SceneView sceneView) Camera InitializePreviewCamera(Camera c, Vector2 previewSize) { - m_PreviewCamera.CopyFrom(c); - EditorUtility.CopySerialized(c, m_PreviewCamera); + Camera previewCamera = null; + HDAdditionalCameraData previewAdditionalCameraData = null; + for (int i = 0; i < serializedObject.targetObjects.Length; i++) + { + if (serializedObject.targetObjects[i] == c) + { + previewCamera = m_PreviewCameras[i]; + previewAdditionalCameraData = m_PreviewAdditionalCameraDatas[i]; + break; + } + } + + previewCamera.CopyFrom(c); + EditorUtility.CopySerialized(c, previewCamera); var cameraData = c.GetComponent(); - EditorUtility.CopySerialized(cameraData, m_PreviewAdditionalCameraData); + EditorUtility.CopySerialized(cameraData, previewAdditionalCameraData); // We need to explicitly reset the camera type here // It is probably a CameraType.Game, because we copied the source camera's properties. - m_PreviewCamera.cameraType = CameraType.Preview; - m_PreviewCamera.gameObject.SetActive(false); + previewCamera.cameraType = CameraType.Preview; + previewCamera.gameObject.SetActive(false); var previewTexture = GetPreviewTextureWithSize((int)previewSize.x, (int)previewSize.y); - m_PreviewCamera.targetTexture = previewTexture; - m_PreviewCamera.pixelRect = new Rect(0, 0, previewSize.x, previewSize.y); + previewCamera.targetTexture = previewTexture; + previewCamera.pixelRect = new Rect(0, 0, previewSize.x, previewSize.y); - return m_PreviewCamera; + return previewCamera; } static Type k_SceneViewOverlay_WindowFunction = Type.GetType("UnityEditor.SceneViewOverlay+WindowFunction,UnityEditor"); diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.cs index 06ce4741122..da9e0923ed3 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.cs @@ -15,19 +15,25 @@ partial class HDCameraEditor : Editor SerializedHDCamera m_SerializedCamera; RenderTexture m_PreviewTexture; - Camera m_PreviewCamera; - HDAdditionalCameraData m_PreviewAdditionalCameraData; + Camera[] m_PreviewCameras; + HDAdditionalCameraData[] m_PreviewAdditionalCameraDatas; void OnEnable() { m_SerializedCamera = new SerializedHDCamera(serializedObject); - m_PreviewCamera = EditorUtility.CreateGameObjectWithHideFlags("Preview Camera", HideFlags.HideAndDontSave, typeof(Camera)).GetComponent(); - m_PreviewCamera.enabled = false; - m_PreviewCamera.cameraType = CameraType.Preview; // Must be init before adding HDAdditionalCameraData - m_PreviewAdditionalCameraData = m_PreviewCamera.gameObject.AddComponent(); - // Say that we are a camera editor preview and not just a regular preview - m_PreviewAdditionalCameraData.isEditorCameraPreview = true; + var targetCount = serializedObject.targetObjects.Length; + m_PreviewCameras = new Camera[targetCount]; + m_PreviewAdditionalCameraDatas = new HDAdditionalCameraData[targetCount]; + for (int i = 0; i < targetCount; i++) + { + m_PreviewCameras[i] = EditorUtility.CreateGameObjectWithHideFlags("Preview " + serializedObject.targetObject.name, HideFlags.HideAndDontSave, typeof(Camera)).GetComponent(); + m_PreviewCameras[i].enabled = false; + m_PreviewCameras[i].cameraType = CameraType.Preview; // Must be init before adding HDAdditionalCameraData + m_PreviewAdditionalCameraDatas[i] = m_PreviewCameras[i].gameObject.AddComponent(); + // Say that we are a camera editor preview and not just a regular preview + m_PreviewAdditionalCameraDatas[i].isEditorCameraPreview = true; + } } void OnDisable() @@ -37,8 +43,10 @@ void OnDisable() m_PreviewTexture.Release(); m_PreviewTexture = null; } - DestroyImmediate(m_PreviewCamera.gameObject); - m_PreviewCamera = null; + for (int i = 0; i < serializedObject.targetObjects.Length; i++) + DestroyImmediate(m_PreviewCameras[i].gameObject); + m_PreviewCameras = null; + m_PreviewAdditionalCameraDatas = null; } public override void OnInspectorGUI()