Search Unity

Get asset path of open prefab

Discussion in 'Prefabs' started by georgerh, Nov 21, 2020.

  1. georgerh

    georgerh

    Joined:
    Feb 28, 2020
    Posts:
    72
    When you edit a prefab in editor mode without opening it (just selecting the prefab in the project), scripts on the prefab can get the prefab path with AssetDatabase.GetAssetPath(gameObject). However, when you open the prefab (by clicking the "Open Prefab" button) AssetDatabase.GetAssetPath returns an empty string.

    I tried all the methods in PrefabUtility but not a single one works:
    var a = AssetDatabase.GetAssetPath(gameObject); // ""
    var b = PrefabUtility.GetPrefabAssetType(gameObject); // NotAPrefab
    var c = PrefabUtility.GetPrefabInstanceStatus(gameObject); // NotAPrefab
    var d = PrefabUtility.GetCorrespondingObjectFromOriginalSource(gameObject); // null
    var e = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(gameObject); // ""
    var f = PrefabUtility.GetNearestPrefabInstanceRoot(gameObject); // null
    var g = PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject); // null
    var h = PrefabUtility.GetCorrespondingObjectFromSource(gameObject); // null
    var i = PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject); // null
    var j = PrefabUtility.GetPrefabInstanceHandle(gameObject); // null
    var k = PrefabUtility.IsDisconnectedFromPrefabAsset(gameObject); // false
    var l = PrefabUtility.IsPartOfAnyPrefab(gameObject); // false
    var m = PrefabUtility.IsPartOfImmutablePrefab(gameObject); // false
    var n = PrefabUtility.IsOutermostPrefabInstanceRoot(gameObject); // false
    var o = PrefabUtility.IsPartOfNonAssetPrefabInstance(gameObject); // false
    var p = PrefabUtility.IsPartOfPrefabAsset(gameObject); // false
    var q = PrefabUtility.IsPartOfVariantPrefab(gameObject); // false
    var r = PrefabUtility.IsPartOfRegularPrefab(gameObject); // false
    var s = PrefabUtility.IsPrefabAssetMissing(gameObject); // false


    How do you get the asset path of an open prefab?

    PS: I'm on Unity 2019.4.2f1
     
    Last edited: Nov 21, 2020
    hickv likes this.
  2. georgerh

    georgerh

    Joined:
    Feb 28, 2020
    Posts:
    72
    Fortunately, a colleague was able to help. You have to call
    UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage ()?.prefabAssetPath;
     
  3. hugme12138

    hugme12138

    Joined:
    Aug 16, 2021
    Posts:
    2
    Save my day
     
  4. liveswithoutfear

    liveswithoutfear

    Joined:
    Sep 4, 2018
    Posts:
    11
    What a little legend you are!