是否可以检测在 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){}
我正在尝试制作自定义编辑器,我想知道在 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){}