Pattern — C++ Program + Blueprint Child
Split program logic between C++ (validation, performance) and a Blueprint child (widget assignment, icons, Store metadata). Recompile only when C++ behavior changes.
flowchart TB
subgraph cpp["C++ (game module)"]
Header["UMyNativeProgram.h"]
Impl["OnValidate, OnProgramStarted"]
end
subgraph bp["Blueprint child (Content)"]
Child["BP_Prog_MyNativeTool"]
Widget["WBP_MyNativeTool"]
end
Header --> Child
Child -->|"Widget Class, Icon, Store metadata"| Widget
Child --> Collection["Programs Collection → OS"]
Module setup
Section titled “Module setup”PrivateDependencyModuleNames.AddRange(new string[]{ "OperatingSystemSimulator", "UMG", "DraggableWindowUMG"});C++ header pattern
Section titled “C++ header pattern”UCLASS(Blueprintable)class UMyNativeProgram : public UOperatingSystemBaseProgram{ GENERATED_BODY()
protected: virtual void OnValidate(FGenericError& OutError) const override; virtual void OnProgramStarted() override;};Screenshot callouts
Section titled “Screenshot callouts”Blueprint child workflow
Section titled “Blueprint child workflow”sequenceDiagram participant Dev as Developer participant CPP as UMyNativeProgram participant BP as BP_Prog_MyNativeTool participant OS as UOperatingSystem Dev->>CPP: Implement OnValidate / OnProgramStarted Dev->>BP: Create Blueprint child BP->>BP: Assign Widget Class, icons, Store fields Dev->>OS: Add BP child to Programs Collection OS->>CPP: Spawns CDO defaults via Blueprint child