From 86f07ce902eebc98b474893950b3475194c518c4 Mon Sep 17 00:00:00 2001 From: martint-unity Date: Wed, 18 Nov 2020 09:45:54 +0100 Subject: [PATCH] [8.x.x] backport of #1898 null ref in cam prefab --- .../CHANGELOG.md | 1 + .../UniversalRenderPipelineCameraEditor.cs | 25 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/com.unity.render-pipelines.universal/CHANGELOG.md b/com.unity.render-pipelines.universal/CHANGELOG.md index ebb1a1d1a88..82f78b4826b 100644 --- a/com.unity.render-pipelines.universal/CHANGELOG.md +++ b/com.unity.render-pipelines.universal/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed Missing camera cannot be removed after scene is saved by removing the Missing camera label. [case 1252255](https://issuetracker.unity3d.com/issues/universal-rp-missing-camera-cannot-be-removed-from-camera-stack-after-scene-is-saved) - Fixed MissingReferenceException when removing Missing camera from camera stack by removing Missing camera label. [case 1252263](https://issuetracker.unity3d.com/issues/universal-rp-missingreferenceexception-errors-when-removing-missing-camera-from-stack) - Fixed a memory leak in Scriptable Renderer Data Editor. +- Fixed an issue that caused a null reference when deleting camera component in a prefab. [case 1244430](https://issuetracker.unity3d.com/issues/urp-argumentnullexception-error-is-thrown-on-removing-camera-component-from-camera-prefab) ## [8.2.0] - 2020-07-08 diff --git a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineCameraEditor.cs b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineCameraEditor.cs index 2e0ce615207..bf9a5181cd7 100644 --- a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineCameraEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineCameraEditor.cs @@ -1092,13 +1092,28 @@ public void RemoveComponent(Camera camera, IEnumerable dependencies) return; } - Undo.SetCurrentGroupName("Remove Universal Camera"); - var additionalCameraData = camera.GetComponent(); - if (additionalCameraData) + var isAssetEditing = EditorUtility.IsPersistent(camera); + try { - Undo.DestroyObjectImmediate(additionalCameraData); + if (isAssetEditing) + { + AssetDatabase.StartAssetEditing(); + } + Undo.SetCurrentGroupName("Remove Universal Camera"); + var additionalCameraData = camera.GetComponent(); + if (additionalCameraData != null) + { + Undo.DestroyObjectImmediate(additionalCameraData); + } + Undo.DestroyObjectImmediate(camera); + } + finally + { + if (isAssetEditing) + { + AssetDatabase.StopAssetEditing(); + } } - Undo.DestroyObjectImmediate(camera); } } }