Skip to content

Commit 7ac1cd7

Browse files
Fixed camera preview with multi selection (#4085)
Co-authored-by: sebastienlagarde <[email protected]>
1 parent 7b11ade commit 7ac1cd7

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

com.unity.render-pipelines.high-definition/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
138138
- Fixed Decal's UV edit mode with negative UV
139139
- Fixed issue with the color space of AOVs (case 1324759)
140140
- Fixed issue with history buffers when using multiple AOVs (case 1323684).
141+
- Fixed camera preview with multi selection (case 1324126).
141142

142143
### Changed
143144
- Changed Window/Render Pipeline/HD Render Pipeline Wizard to Window/Rendering/HDRP Wizard

com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.Handlers.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,32 @@ void OnOverlayGUI(Object target, SceneView sceneView)
2828

2929
Camera InitializePreviewCamera(Camera c, Vector2 previewSize)
3030
{
31-
m_PreviewCamera.CopyFrom(c);
32-
EditorUtility.CopySerialized(c, m_PreviewCamera);
31+
Camera previewCamera = null;
32+
HDAdditionalCameraData previewAdditionalCameraData = null;
33+
for (int i = 0; i < serializedObject.targetObjects.Length; i++)
34+
{
35+
if (serializedObject.targetObjects[i] == c)
36+
{
37+
previewCamera = m_PreviewCameras[i];
38+
previewAdditionalCameraData = m_PreviewAdditionalCameraDatas[i];
39+
break;
40+
}
41+
}
42+
43+
previewCamera.CopyFrom(c);
44+
EditorUtility.CopySerialized(c, previewCamera);
3345
var cameraData = c.GetComponent<HDAdditionalCameraData>();
34-
EditorUtility.CopySerialized(cameraData, m_PreviewAdditionalCameraData);
46+
EditorUtility.CopySerialized(cameraData, previewAdditionalCameraData);
3547
// We need to explicitly reset the camera type here
3648
// It is probably a CameraType.Game, because we copied the source camera's properties.
37-
m_PreviewCamera.cameraType = CameraType.Preview;
38-
m_PreviewCamera.gameObject.SetActive(false);
49+
previewCamera.cameraType = CameraType.Preview;
50+
previewCamera.gameObject.SetActive(false);
3951

4052
var previewTexture = GetPreviewTextureWithSize((int)previewSize.x, (int)previewSize.y);
41-
m_PreviewCamera.targetTexture = previewTexture;
42-
m_PreviewCamera.pixelRect = new Rect(0, 0, previewSize.x, previewSize.y);
53+
previewCamera.targetTexture = previewTexture;
54+
previewCamera.pixelRect = new Rect(0, 0, previewSize.x, previewSize.y);
4355

44-
return m_PreviewCamera;
56+
return previewCamera;
4557
}
4658

4759
static Type k_SceneViewOverlay_WindowFunction = Type.GetType("UnityEditor.SceneViewOverlay+WindowFunction,UnityEditor");

com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraEditor.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,25 @@ partial class HDCameraEditor : Editor
1515
SerializedHDCamera m_SerializedCamera;
1616

1717
RenderTexture m_PreviewTexture;
18-
Camera m_PreviewCamera;
19-
HDAdditionalCameraData m_PreviewAdditionalCameraData;
18+
Camera[] m_PreviewCameras;
19+
HDAdditionalCameraData[] m_PreviewAdditionalCameraDatas;
2020

2121
void OnEnable()
2222
{
2323
m_SerializedCamera = new SerializedHDCamera(serializedObject);
2424

25-
m_PreviewCamera = EditorUtility.CreateGameObjectWithHideFlags("Preview Camera", HideFlags.HideAndDontSave, typeof(Camera)).GetComponent<Camera>();
26-
m_PreviewCamera.enabled = false;
27-
m_PreviewCamera.cameraType = CameraType.Preview; // Must be init before adding HDAdditionalCameraData
28-
m_PreviewAdditionalCameraData = m_PreviewCamera.gameObject.AddComponent<HDAdditionalCameraData>();
29-
// Say that we are a camera editor preview and not just a regular preview
30-
m_PreviewAdditionalCameraData.isEditorCameraPreview = true;
25+
var targetCount = serializedObject.targetObjects.Length;
26+
m_PreviewCameras = new Camera[targetCount];
27+
m_PreviewAdditionalCameraDatas = new HDAdditionalCameraData[targetCount];
28+
for (int i = 0; i < targetCount; i++)
29+
{
30+
m_PreviewCameras[i] = EditorUtility.CreateGameObjectWithHideFlags("Preview " + serializedObject.targetObject.name, HideFlags.HideAndDontSave, typeof(Camera)).GetComponent<Camera>();
31+
m_PreviewCameras[i].enabled = false;
32+
m_PreviewCameras[i].cameraType = CameraType.Preview; // Must be init before adding HDAdditionalCameraData
33+
m_PreviewAdditionalCameraDatas[i] = m_PreviewCameras[i].gameObject.AddComponent<HDAdditionalCameraData>();
34+
// Say that we are a camera editor preview and not just a regular preview
35+
m_PreviewAdditionalCameraDatas[i].isEditorCameraPreview = true;
36+
}
3137
}
3238

3339
void OnDisable()
@@ -37,8 +43,10 @@ void OnDisable()
3743
m_PreviewTexture.Release();
3844
m_PreviewTexture = null;
3945
}
40-
DestroyImmediate(m_PreviewCamera.gameObject);
41-
m_PreviewCamera = null;
46+
for (int i = 0; i < serializedObject.targetObjects.Length; i++)
47+
DestroyImmediate(m_PreviewCameras[i].gameObject);
48+
m_PreviewCameras = null;
49+
m_PreviewAdditionalCameraDatas = null;
4250
}
4351

4452
public override void OnInspectorGUI()

0 commit comments

Comments
 (0)