是否可以检测在 Unity 中选择了哪种类型的默认资产?

Is it possible to detect what type of Default Asset is selected in Unity?

我正在尝试制作自定义编辑器,我想知道在 GetType() returns [=24= 时是否有任何方法可以检测资产的确切类型].

我可以检测到大部分基本项目(如脚本、场景、着色器、游戏对象),但我无法确定什么类型是 DefaultAsset。 对于文件夹,我使用 IsValidFolder 方法,但我不知道是否有办法获取其他对象的更多信息,例如 .DLL

这实际上是我的代码:

if (Selection.activeObject == null) return;
switch (Selection.activeObject.GetType().Name)      
{
     case "SceneAsset":
          //IsAScene
     break;
     case "DefaultAsset":
          if (AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(Selection.activeObject)))
          //IsAFolder
          else
          //UnknownItem
     break;
     case "MonoScript":
          //IsAScript
     break;
     case "GameObject":
          //IsAGameObject
          if (PrefabUtility.GetPrefabAssetType(Selection.activeGameObject) != PrefabAssetType.NotAPrefab)
               //IsAPrefab
     break;
     case "Shader":
          //IsAShader
     break;
     case "AudioMixerController":
          //IsAnAudioMixer
     break;
     default:     
     //Other
     break;
}

试试这样的东西:

if (Selection.activeObject.GetType() == typeof(DefaultAsset))
{
    // ...
}

我将留给您将其采纳到您的 switch 声明中。另外如前所述,不要使用 魔术字符串。 请改用 typeof

在 Unity 中(还)没有获取 DefaultAsset 类型的通用方法。

您必须使用特定代码来检测特定类型。

要检测 dll 文件,您可以检查其扩展名或导入程序。

var path = AssetDatabase.GetAssetPath(Selection.activeObject);

var extension = Path.GetExtension(path).ToLowerInvariant();
if(extension == ".dll" || extension == ".so"){}

var importer = AssetImporter.GetAtPath(path) as PluginImporter;
if(importer){}