- Home /
EditorApplication.projectWindowItemOnGUI and sub assets
I want to provide a custom icon for a classes which extends from ScriptableObject. The class has sub assets of Texture2Ds which you can see here.
![]()
The icon needs to be generated dynamically, so I'm using EditorApplication.projectWindowItemOnGUI which works nicely. However this then causes a problem with the sub assets:
![]()
The method is applied not only to the main asset, but also all sub assets. Normally I'd use IsMainAsset / IsSubAsset, but because the method only exposes a Guid, all I can do is GUIDToAssetPath, and the method invokes for all of the sub assets leaving me no means of telling them apart:
[DidReloadScripts]
static AssetDatabaseIcons()
{
EditorApplication.projectWindowItemOnGUI = AssetDatabaseIcons.ProjectWindowItemOnGUI;
}
// This method is invoked once for the main asset and n times for the sub assets
// The same guid is passed over on all of the calls
private static void ProjectWindowItemOnGUI(string guid, Rect rect)
{
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
ScriptableObject scriptableObject = AssetDatabase.LoadAssetAtPath<ScriptableObject>(assetPath);
//AssetDatabaseIcons.DrawScriptableObjectIcon(rect, scriptableObject);
}
Is there any way of solving this problem? I can't see any way but I'm hoping there might be a method I can use via reflection. I note that this method does not prevent the default icon from being drawn, so can I hook into that somehow?
Your answer