In this lesson, you’ll learn how to package your C++ logic into self-contained plugins so you can move your hard work from one project to another without touching the engine's core code.
Encapsulating Your Logic
When you develop a feature directly inside your project’s Source folder, that code is "tethered" to that specific project. If you want to use that character controller or inventory system in a new project, you usually end up copy-pasting files, which leads to maintenance nightmares.
A Plugin acts as an isolated island. It has its own Source folder, its own Public/Private include structure, and its own Build.cs file. By treating your features as plugins, you effectively create a "black box." Your project doesn't need to know how the plugin works; it only needs to know how to include the plugin's header files.
Anatomy of a Reusable Plugin
To create a plugin, you use the Unreal Editor’s "Plugins" window to generate a new module. Once created, you will see a structure like this:
// YourPlugin.Build.cs
public class YourPlugin : ModuleRules {
public YourPlugin(ReadOnlyTargetRules Target) : base(Target) {
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
// Define dependencies specifically for this plugin
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
}
}
By keeping your plugin's dependencies explicit, you ensure that any project importing this plugin satisfies its requirements automatically. Because the plugin is a separate module, you can share the entire folder via version control or by dropping it into the /Plugins folder of any new project. It will be compiled independently, keeping your main game project’s build times cleaner and your codebase organized.
Instead of writing code that "belongs" to a project, think of yourself as writing code that "serves" the project. When you isolate logic into a plugin, you ensure that your work is modular, portable, and—most importantly—reusable.
Key Takeaway: Modular plugins encapsulate features into independent modules, allowing you to carry complex functionality between projects by simply moving a single folder.