class PrefabInstanceEditor : Editor
{
public override void OnInspectorGUI()
{
var instance = (NavMeshPrefabInstance)target;
var go = instance.gameObject;
OnInspectorGUIPrefab(go);
}
void OnInspectorGUIPrefab(GameObject go)
{
//方法1
//var prefab = PrefabUtility.GetPrefabObject(go);
//var path = AssetDatabase.GetAssetPath(prefab);
//方法2
//var prefab = PrefabUtility.GetPrefabInstanceHandle(go);
//var path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(go);
//方法3
var prefab = PrefabUtility.GetCorrespondingObjectFromSource(go);
var path = AssetDatabase.GetAssetPath(prefab);
if (prefab && string.IsNullOrEmpty(path))
{
if (GUILayout.Button("Select the Prefab asset to bake or clear the navmesh", EditorStyles.helpBox))
{
Selection.activeObject = PrefabUtility.GetCorrespondingObjectFromSource(go);
EditorGUIUtility.PingObject(Selection.activeObject);
}
}
}
}
Unity 获取实例的预制体路径
最新推荐文章于 2024-06-08 23:47:27 发布