是否有可能检测Unity中选择的默认资产类型?



我试图做一个自定义编辑器,我想知道是否有任何方法来检测什么确切的类型是一个资产当GetType()返回UnityEditor.DefaultAsset

我可以检测大多数基本项目(如脚本,场景,着色器,游戏对象),但我还没有能够确定什么类型是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;
}

在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){}

试试这样写:

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

我将把它留给你采用它到你的switch声明。同样如前所述,不要使用魔法字符串。typeof代替。

  • 告诉我更多
  • DefaultAsset

最新更新