Unity中预制体Prefab的状态:
1.位于Project资源文件中Prefab的,状态表现为 PrefabAsset
2.位于Scene中的实例物体,状态表现为 PrefabInstance
3.位于PrefabMode(预制体模式)的Scene中,状态表现既不是PrefabAsset也不是Prefab Instance,通过UnityEditor.SceneManagement.PrefabStageUtility.GetPrefabStage()来获取PrefabStage判定
public static string GetPrefabAssetPath(GameObject gameObject)
{
// 判断物体是Project资源文件中的Prefab 是Asset
if (UnityEditor.PrefabUtility.IsPartOfPrefabAsset(gameObject))
{
// 自身就是预制体资源,返回自身文件路径
return UnityEditor.AssetDatabase.GetAssetPath(gameObject);
}
// Scene场景中的预制体实例化物体:Prefab Instance是Instance不是Asset
if (UnityEditor.PrefabUtility.IsPartOfPrefabInstance(gameObject))
{
// 获取到物体对应的预制体资源
var prefabAsset = UnityEditor.PrefabUtility.GetCorrespondingObjectFromOriginalSource(gameObject);
return UnityEditor.AssetDatabase.GetAssetPath(prefabAsset);
}
// 预制体模式窗口PrefabMode中的GameObject既不是Instance也不是Asset
var prefabStage = UnityEditor.SceneManagement.PrefabStageUtility.GetPrefabStage(gameObject);
if (prefabStage != null)
{
// 预制体资源:prefabAsset = prefabStage.prefabContentsRoot
return prefabStage.assetPath;
}
// 则不是预制体
return null;
}

1893

被折叠的 条评论
为什么被折叠?



