我试图做一个自定义编辑器,我想知道是否有任何方法来检测什么确切的类型是一个资产当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