Why is PrefabUtility.IsPartOfAnyPrefab(gameObject) returning false even though the object is a prefab?

Like the question implies, I have a script that runs in the editor and I am trying to test if an object is a prefab; however, PrefabUtility.IsPartOfAnyPrefab(gameObject) returns false. I have tried other commands such as PrefabUtility.IsPartOfModelPrefab(gameObject), PrefabUtility.IsPartOfPrefabAsset(gameObject), and PrefabUtility.IsPartOfRegularPrefab(gameObject) yet they all return false. What could be causing this to fail?

Thanks in advance!

even though the object is a prefab?

Are you actually sure about that? Keep in mind that when you use Instantiate on a prefab the created clone is not a “prefab” nor a “prefab instance”. If you want to create an instance of a prefab inside the editor you have to use PrefabUtility.InstantiatePrefab. We don’t know enough about what that “object” is, where it’s located, etc …

@Nate2033 The object we don’t know much about I called PrefabContent. When you open “Open” prefab, that’s Prefab content, and is same type as any pure GameObject, so PrefabUtility.IsPartOfAnyPrefab(gameObject) returns false. To find out Prefab asset from PrefabContent you should use PrefabUtility.GetCorrespondingObjectFromOriginalSource

The code will help you test your GameObjects in u2019 similar to previous APIs `

#if UNITY_2019_1_OR_NEWER
    public enum PrefabType {
        None = 0,

        Prefab = 1,

        ModelPrefab = 2,

        PrefabInstance = 3,

        ModelPrefabInstance = 4,

        MissingPrefabInstance = 5,

        DisconnectedPrefabInstance = 6,

        DisconnectedModelPrefabInstance = 7,

        PrefabContent = 8,

        Variant = 9

    }
#endif

public static PrefabType GetPrefabType(UnityEngine.Object target) {
#if UNITY_2019_1_OR_NEWER

            if (target is GameObject && PrefabStageUtility.GetPrefabStage(target as GameObject) !=null) return PrefabType.PrefabContent;

            if (!PrefabUtility.IsPartOfAnyPrefab(target))
            {
                return PrefabType.None;
            }
            else
            {
                switch (PrefabUtility.GetPrefabInstanceStatus(target))
                {
                    case PrefabInstanceStatus.NotAPrefab:

                        switch (PrefabUtility.GetPrefabAssetType(target))
                        {
                            case PrefabAssetType.Regular:
                                return PrefabType.Prefab;
                            case PrefabAssetType.Variant:
                                return PrefabType.Variant;
                            case PrefabAssetType.Model:
                                return PrefabType.ModelPrefab;
                        }
                        break;

                    case PrefabInstanceStatus.Connected:
                        if (PrefabUtility.IsPartOfModelPrefab(target))
                            return PrefabType.ModelPrefabInstance;
                        else
                            return PrefabType.PrefabInstance;

                    case PrefabInstanceStatus.Disconnected:
                        if (PrefabUtility.IsPartOfModelPrefab(target))
                            return PrefabType.DisconnectedModelPrefabInstance;
                        else
                            return PrefabType.DisconnectedPrefabInstance;

                    case PrefabInstanceStatus.MissingAsset:
                        return PrefabType.MissingPrefabInstance;
                }

                return PrefabType.None;
            }



#else

            return PrefabUtility.GetPrefabType(target);

#endif
        }`