Custom editor for custom asset

I have a custom asset type - TreeAsset. I have an editor utility widget to edit it, but its window cant be docked in global area (like another asset editors). All I want to achieve, is:

  • able to dock this window in global area
  • open new window when any of my TreeAsset double clicked in content browser

I known about marking properties as EditAnywhere (as suggested here), but I need exactly my own editor window.

Utility Widget is not a substitute to native Slate, which you normally should do when you extend the editor in C++. If you do plug in to Marketplace there quite high possibility it will be rejected if you not do this. Not to mention you missing out on ability to embed many existing editor widgets that are only accessible via Slate, including most common used property editor which you might find useful in asset editing.

Since UMG is a Slate wrapper they are widget compatible so it should be easy to convert your editor utility to Slate UI definition (using SNew)

You can create a tab from FTabManager:

To create new tab you will also need to create register TabSpawner, which should send tab UI content which kind of force you to use Slate anyway. You can find example of that exiting editor code herel ink to one of mroe simple once which is texture asset editor:

https://github.com/EpicGames/UnrealEngine/blob/7d9919ac7bfd80b7483012eab342cb427d60e8c9/Engine/Source/Editor/TextureEditor/Private/TextureEditorToolkit.cpp

Look at RegisterTabSpawners, UnregisterTabSpawners and InitTextureEditor which opens editor it self. As you can see editors themselves are self contained in where own non-UObject class usally inheriting interface which exposes some functions to outside of your module (which is optional i think).

Even if you want to use utility widget you would need to set up the TabSpawner and try to pop in get cached from UWidget object that utility widget asset generates :

UEditorUtilityWidgetBlueprint | Unreal Engine Documentation using

Using TakeWidget (if widget is constructed an visible) or RebuildWidget (that creates Slate definition of UMG widget):

But i’m not sure how this gonna work with blueprint code you made in it, it really quite hackish way to do it, while you could just make Slate UI in C++.