添加缺失插件
This commit is contained in:
85
Assets/Asset Usage Finder/Editor/PrefabUtilities.cs
Normal file
85
Assets/Asset Usage Finder/Editor/PrefabUtilities.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
#if UNITY_2018_3_OR_NEWER
|
||||
using UnityEditor;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
namespace AssetUsageFinder {
|
||||
public static class PrefabUtilities {
|
||||
public class PrefabProperties {
|
||||
public bool IsPartOfStage;
|
||||
public bool IsStageRoot;
|
||||
public bool IsPartOfInstance;
|
||||
public bool IsInstanceRoot;
|
||||
public GameObject NearestInstanceRoot;
|
||||
public bool IsAssetRoot;
|
||||
public bool IsPartOfPrefabAsset;
|
||||
public string Path;
|
||||
public GameObject PrefabAssetRoot;
|
||||
|
||||
public bool IsSceneObject => (!IsPartOfPrefabAsset && !IsPartOfStage);
|
||||
public bool IsPartOfAnyPrefab => Path != null;
|
||||
public bool IsRootOfAnyPrefab => IsAssetRoot || IsInstanceRoot || IsStageRoot;
|
||||
}
|
||||
|
||||
public static PrefabProperties GetPrefabProperties (GameObject gameObject) {
|
||||
var p = new PrefabProperties ();
|
||||
|
||||
p.IsPartOfPrefabAsset = PrefabUtility.IsPartOfPrefabAsset (gameObject);
|
||||
|
||||
if (!p.IsPartOfPrefabAsset)
|
||||
p.IsPartOfPrefabAsset = !string.IsNullOrEmpty (AssetDatabase.GetAssetPath (gameObject));
|
||||
|
||||
GameObject nerestInstanceRoot = p.NearestInstanceRoot = PrefabUtility.GetNearestPrefabInstanceRoot (gameObject);
|
||||
p.IsPartOfInstance = (nerestInstanceRoot != null);
|
||||
p.IsInstanceRoot = (gameObject == nerestInstanceRoot);
|
||||
|
||||
if (p.IsPartOfPrefabAsset) {
|
||||
p.PrefabAssetRoot = gameObject.transform.root.gameObject;
|
||||
p.IsAssetRoot = (gameObject == p.PrefabAssetRoot);
|
||||
}
|
||||
|
||||
var editorPrefabStage = UnityEditor.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage ();
|
||||
if (editorPrefabStage != null) {
|
||||
if (p.IsPartOfPrefabAsset == false)
|
||||
p.IsPartOfStage = true;
|
||||
|
||||
if (p.IsPartOfStage && gameObject.transform.parent == null)
|
||||
p.IsStageRoot = true;
|
||||
}
|
||||
|
||||
if (p.IsRootOfAnyPrefab) {
|
||||
if (p.IsStageRoot) {
|
||||
p.Path = GetPath ();
|
||||
}
|
||||
else if (p.IsInstanceRoot) {
|
||||
p.Path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot (gameObject);
|
||||
}
|
||||
else if (p.IsAssetRoot) {
|
||||
p.Path = AssetDatabase.GetAssetPath (gameObject);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (p.IsPartOfStage) {
|
||||
p.Path = GetPath ();
|
||||
}
|
||||
else if (p.IsPartOfInstance) {
|
||||
p.Path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot (p.NearestInstanceRoot);
|
||||
}
|
||||
else if (p.IsPartOfPrefabAsset) {
|
||||
p.Path = AssetDatabase.GetAssetPath (gameObject.transform.root.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
|
||||
string GetPath () {
|
||||
#if UNITY_2020_1_OR_NEWER
|
||||
return editorPrefabStage.assetPath;
|
||||
#else
|
||||
return editorPrefabStage.prefabAssetPath;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user