{"record":{"id":"6d4c2877bcabc2e8","repo":"Unity-Technologies/UnityCsReference","slug":"plaingameobject","errorCode":null,"errorMessage":"plainGameObject","messagePattern":"plainGameObject","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/Prefabs/PrefabUtility.cs","lineNumber":2346,"sourceCode":"                Undo.FlushTrackedObjects();\n                Undo.SetCurrentGroupName(undoActionName);\n                Undo.RegisterFullObjectHierarchyUndo(prefabInstanceRoot, undoActionName);\n            }\n\n            bool success = ReplacePrefabAssetOfPrefabInstance_Internal(prefabInstanceRoot, prefabAssetRoot, settings);\n            if (!success)\n            {\n                Debug.LogError(string.Format(\"Replace Prefab Instance failed for instance '{0}' using asset '{1}' at '{2}'\", prefabInstanceRoot.name, prefabAssetRoot.name, AssetDatabase.GetAssetPath(prefabAssetRoot)), prefabInstanceRoot);\n            }\n\n            if (mode == InteractionMode.UserAction)\n                Undo.FlushTrackedObjects();\n        }\n\n        internal static void ThrowIfInvalidArgumentsForConvertToPrefabInstance(GameObject plainGameObject, GameObject prefabAssetRoot, bool checkValidAsset, InteractionMode mode)\n        {\n            if (plainGameObject == null)\n                throw new ArgumentNullException(nameof(plainGameObject));\n\n            if (prefabAssetRoot == null)\n                throw new ArgumentNullException(nameof(prefabAssetRoot));\n\n            if (IsPartOfNonAssetPrefabInstance(plainGameObject))\n                throw new InvalidOperationException(string.Format(\"Input '{0}' is not a plain GameObject, it is already a Prefab instance. Use ReplacePrefabAssetOfPrefabInstance() instead.\", plainGameObject.name));\n\n            if (EditorUtility.IsPersistent(plainGameObject))\n                throw new ArgumentException(\"Input is from a Prefab asset, this is not supported. Input GameObject: \" + plainGameObject.name, nameof(plainGameObject));\n\n            if (checkValidAsset)\n                ThrowIfInvalidAssetForReplacePrefabInstance(prefabAssetRoot, mode);\n\n            if (plainGameObject.transform.GetType() != prefabAssetRoot.transform.GetType())\n                throw new InvalidOperationException(string.Format(\"Cannot convert the GameObject '{0}' with root transform of type {1} with a Prefab asset with root transform of type {2}. Transform types must match.\", plainGameObject.name, plainGameObject.transform.GetType().Name, prefabAssetRoot.transform.GetType().Name));\n\n            // Prefab Mode and EditPrefabContents scope handling\n            if (PrefabStageUtility.IsGameObjectThePrefabRootInAnyPrefabStage(plainGameObject) || (EditorSceneManager.IsPreviewSceneObject(plainGameObject) && plainGameObject.transform.parent == null))","sourceCodeStart":2328,"sourceCodeEnd":2364,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/Prefabs/PrefabUtility.cs#L2328-L2364","documentation":"Thrown by ThrowIfInvalidArgumentsForConvertToPrefabInstance when plainGameObject is null. This is the standard ArgumentNullException guard at the top of the validation method for ConvertToPrefabInstance. The argument name 'plainGameObject' is used via nameof.","triggerScenarios":"Calling PrefabUtility.ConvertToPrefabInstance(null, prefabAsset, settings, mode) — e.g. passing a reference that was never assigned or a destroyed object.","commonSituations":"Object reference lost after DestroyImmediate in the same frame. Deserialized data pointing to a destroyed asset. Selection.activeGameObject returning null when nothing is selected.","solutions":["Null-check plainGameObject before calling ConvertToPrefabInstance.","Validate that Selection.activeGameObject is non-null in editor menu actions.","Use the null-conditional operator or early-return guards."],"exampleFix":"// before\nPrefabUtility.ConvertToPrefabInstance(target, prefabAsset, settings, mode);\n// target could be null\n\n// after\nif (target != null)\n    PrefabUtility.ConvertToPrefabInstance(target, prefabAsset, settings, mode);","handlingStrategy":"validation","validationCode":"if (plainGameObject == null)\n{\n    Debug.LogError(\"plainGameObject is null.\");\n    return;\n}\nPrefabUtility.ConvertToPrefabInstance(plainGameObject, prefabAssetRoot, settings, mode);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate Selection.activeGameObject is non-null before passing to editor menu actions.","Guard against destroyed references (obj == null in Unity) before all Prefab API calls."],"tags":["prefab","argument-null","argument-validation","unity-editor"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}