{"record":{"id":"135d4ec440f3b9c7","repo":"Unity-Technologies/UnityCsReference","slug":"the-provided-camera-mode-0-is-not-registered","errorCode":null,"errorMessage":"The provided camera mode {0} is not registered!","messagePattern":"The provided camera mode (.+?) is not registered!","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/SceneView/SceneView.cs","lineNumber":746,"sourceCode":"\n        internal SceneOrientationGizmo m_OrientationGizmo;\n\n        public CameraMode cameraMode\n        {\n            get\n            {\n                // fix for case 969889 where the toolbar is empty when we haven't fully initialized the value\n                if (string.IsNullOrEmpty(m_CameraMode.name))\n                {\n                    m_CameraMode = SceneRenderModeWindow.GetBuiltinCameraMode(m_CameraMode.drawMode);\n                }\n                return m_CameraMode;\n            }\n            set\n            {\n                if (!IsValidCameraMode(value))\n                {\n                    throw new ArgumentException(string.Format(\"The provided camera mode {0} is not registered!\", value));\n                }\n                m_CameraMode = value;\n\n                if (onCameraModeChanged != null)\n                    onCameraModeChanged(m_CameraMode);\n            }\n        }\n\n        [Obsolete(\"m_ValidateTrueMetals has been deprecated. Use validateTrueMetals instead (UnityUpgradable) -> validateTrueMetals\", true)]\n        public bool m_ValidateTrueMetals = false;\n\n        [SerializeField]\n        bool m_DoValidateTrueMetals = false;\n\n        public bool validateTrueMetals\n        {\n            get => m_DoValidateTrueMetals;\n","sourceCodeStart":728,"sourceCodeEnd":764,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/SceneView/SceneView.cs#L728-L764","documentation":"Thrown by the SceneView.cameraMode setter when IsValidCameraMode returns false for the provided CameraMode. The setter requires the mode to be registered either as a builtin mode or as a user-defined mode added via AddCameraMode. Passing an unregistered or stale CameraMode struct triggers this guard.","triggerScenarios":"Constructing a CameraMode manually with arbitrary values and assigning it. Holding a reference to a CameraMode that was never added via AddCameraMode. A mode from a different Unity version or a mode removed after a domain reload.","commonSituations":"Caching a CameraMode across editor sessions where user-defined modes don't persist. Copying a CameraMode struct from another SceneView that has different registered modes. Editor scripts that fabricate CameraMode values.","solutions":["Only assign CameraMode values obtained from SceneView.GetBuiltinCameraMode or SceneView.AddCameraMode.","Validate with sceneView.IsValidCameraMode (or SceneView's static check) before assigning.","Re-add custom modes via AddCameraMode after domain reloads before referencing them."],"exampleFix":"// before\nsceneView.cameraMode = myCachedMode;\n\n// after\nif (SceneView.GetBuiltinCameraMode(myCachedMode.drawMode).name == myCachedMode.name || IsUserDefinedModeRegistered(myCachedMode))\n    sceneView.cameraMode = myCachedMode;\nelse\n    sceneView.cameraMode = SceneView.GetBuiltinCameraMode(DrawCameraMode.Textured);","handlingStrategy":"validation","validationCode":"bool CanSetCameraMode(SceneView sv, CameraMode mode)\n{\n    return sv.IsValidCameraMode(mode);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only assign CameraMode values obtained from GetBuiltinCameraMode or AddCameraMode.","Re-register user-defined modes after domain reloads before referencing them."],"tags":["unity","scene-view","editor","validation"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}