'Is it possible to detect what type of Default Asset is selected in Unity?
i'm trying to make a custom editor and i was wondering if there's any way to detect what exact type is an asset when GetType()
returns UnityEditor.DefaultAsset.
I can detect most of the basic items(Like script, scene, shader, gameobject) but i haven't been able to determine what type is a DefaultAsset. For folders I use the IsValidFolder method, but i don't know if there's a way to get more information for other objects, like a .DLL
This is actually my code:
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;
}
Solution 1:[1]
There is no general method to get type of DefaultAsset
in Unity (yet).
You have to use specific code to detect a specific type.
To detect dll files you can check its extension or importer.
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){}
Solution 2:[2]
Try something like:
if (Selection.activeObject.GetType() == typeof(DefaultAsset))
{
// ...
}
I'll leave it to you to adopt it into your switch
statement. Also as mentioned, don't use magic strings. Use typeof
instead.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | shingo |
Solution 2 | MickyD |