Where to begin for plugin development?

Hi there,

I am currently learning Unreal Engine and need some assistance. I am wanting to learn how to create plugins and tools that extend the editor, but I am having trouble locating resources for someone who is a beginner to tool programming. I was wondering what resources current tool programmers used to learn and where to begin?

I have read the Plugins page that describes how to create a blank plugin and its anatomy etc, but just struggling to find any documentation that would help me understand how to create buttons, menus,windows and functionality.

For instance if I wanted to create a button, that once clicked enables me to then click the mouse in the editor window spawning an actor object, where would I begin to look to know how to create the button, tie it up with the editor window etc.

Apologies if im being unclear, Im just struggling to find some direction and hoping someone can point me the right way. Any resources that would assist in tool development for unreal (Links to documentation, books, tutorials, etc) would be greatly appreciated!

Thank you!

First of all you need to understand that code plugin and C++ game project is no different, the only difference is how you code module is distributed and enabled, if you put code from C++ game project it will work the same. By writing C++ in UE4 no matter where you technically extending engine code (you just adding you modules to already exiting pool of enigne modules) and your code has same potential as engine source it self (Except having access to private part of module in engine, but that limitation that other engine modules even facing). uplugin is practicly same as uproject file in most part, you got same list of modules and it works the same in both files.

Also impotent to understand is if you compile C++ code to run it in editor, you technically also extending editor it self, you code runs as part of editor (this included game code). When you compile. And yes this means you don’t need a plugin to extend editor, you can do that from C++ game project, as well as plugin don’t need to extend editor you can have some runtime code like Actor classes and they will work the same as you would do that in game code, you only need a plugin to run the same code in multiple projects.

Both facts are main reason why error in your code, crashing the engine and editor, not to mention editor it self technically runs on engine it self. You code becomes part of it, lot of people don’t like it, but on other hand together with fact you can edit engine source code it gives you full control on engine, unlike Unity for example

Editor APIs are only available when you build your module for editor, when you package the game all Editor APIs are gone. That why it impotent to separate runtime code from editor, most common practice is to create 2 modules for runtime and editor, if you need to use editor code in runtime code you can also use

#if WITH _EDITOR 

//You editor code here

#endif

If you plan on extending editor UI it very importent to learn Slate, this is where you should start. If you used UMG you should have general idea how Slate works as UMG is powered by Slate too (techicly is a Blueprint wrapper of Slate). Slate originally was made to be be framework for editor, but it became so powerful that it can be also used in games and UE4 let you do that (both directly and via UMG). You can read about it here:

Now biggest problem is fact that editor part of the engine is burly documented, UE4 documentation team have problem to keep up with growing UE4 that they usually omitt anything related to editor. They assume you can figure everything your self by looking on source code, which is number one information source how to do things in editor, remeber that you extending engine code, so editor features been added same way as it would be plugin, so by looking on source code oyu can apply same practices in you editor code.

Also because UIs in edior is hard coded in respective module in majority of cases you can not directly change it without modifying engine code. Thats why there extender system allowing you to add menu items and widgets in specific entry points , it explained in this of video (it’s quite old but the principles are still the same):

It's not very streamlined system, as each module need to have it's on extender entry point, to extending main level editor window and extend blueprint editor for example you need to talk to 2 different modules APIs which might be annoying to find sometimes (API reference should help you).

Good training for oyu should be looking in to how other plugins are made and agian look also in to engine source code.

There lot of tutorials oyu can find on internet too, just google specific things you want to do.

Depending on what you’re trying to do, you might not even need to create a plugin.
You might be able to do it using Editor Utility Widgets etc.

Thanks for the info!

Plugins is not just editor code, plugins at it’s most basic form overall let you do reusable code across all projects with need to copy it between project over and over again. And vice versa, you can write editor code in the project, 95% of people are 0 aware of that.

Again as i said in initial post, you can do anything that engine code can do anywhere regardless if it’s engine source code, plugin or project code, only limitation is that some things are locked down in modules and can be executed only in specific module, in that case you need to edit that module (aka edit engine source code).

In short only difference is when and where is your code active