Unity-Technologies/UnityCsReference · error · ArgumentException

The provided camera mode {0} is not registered!

Error message

The provided camera mode {0} is not registered!

What it means

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.

Source

Thrown at Editor/Mono/SceneView/SceneView.cs:746

        internal SceneOrientationGizmo m_OrientationGizmo;

        public CameraMode cameraMode
        {
            get
            {
                // fix for case 969889 where the toolbar is empty when we haven't fully initialized the value
                if (string.IsNullOrEmpty(m_CameraMode.name))
                {
                    m_CameraMode = SceneRenderModeWindow.GetBuiltinCameraMode(m_CameraMode.drawMode);
                }
                return m_CameraMode;
            }
            set
            {
                if (!IsValidCameraMode(value))
                {
                    throw new ArgumentException(string.Format("The provided camera mode {0} is not registered!", value));
                }
                m_CameraMode = value;

                if (onCameraModeChanged != null)
                    onCameraModeChanged(m_CameraMode);
            }
        }

        [Obsolete("m_ValidateTrueMetals has been deprecated. Use validateTrueMetals instead (UnityUpgradable) -> validateTrueMetals", true)]
        public bool m_ValidateTrueMetals = false;

        [SerializeField]
        bool m_DoValidateTrueMetals = false;

        public bool validateTrueMetals
        {
            get => m_DoValidateTrueMetals;

View on GitHub (pinned to 225b0fbdb5)

Solutions

  1. Only assign CameraMode values obtained from SceneView.GetBuiltinCameraMode or SceneView.AddCameraMode.
  2. Validate with sceneView.IsValidCameraMode (or SceneView's static check) before assigning.
  3. Re-add custom modes via AddCameraMode after domain reloads before referencing them.

Example fix

// before
sceneView.cameraMode = myCachedMode;

// after
if (SceneView.GetBuiltinCameraMode(myCachedMode.drawMode).name == myCachedMode.name || IsUserDefinedModeRegistered(myCachedMode))
    sceneView.cameraMode = myCachedMode;
else
    sceneView.cameraMode = SceneView.GetBuiltinCameraMode(DrawCameraMode.Textured);
Defensive patterns

Strategy: validation

Validate before calling

bool CanSetCameraMode(SceneView sv, CameraMode mode)
{
    return sv.IsValidCameraMode(mode);
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13). Data as JSON: /api/errors/135d4ec440f3b9c7. Report an issue: GitHub.