#Wątek
1 messages · Page 1 of 1 (latest)
- What Are Modules?
Collections of classes/functionality (e.g., Slate, Ability System).
Unreal ships with >1,000 modules.
Benefits:
Better code encapsulation and reusability across projects.
Faster compile/link times (only changed modules recompile).
Control over loading order and platform-specific inclusion.
- Creating Modules: The B.U.I.L.D. Acronym
Build:
Create a [ModuleName].Build.cs file (e.g., FooBar.Build.cs).
Define dependencies (e.g., PublicDependencyModuleNames.Add("Core")).
Use:
Organize code into Public (headers for other modules) and Private folders.
Export symbols for cross-module access:
Use [MODULENAME]_API macros (e.g., FOOBAR_API before class/function declarations).
Dependency types:
PublicDependency: Required for headers exposed to dependent modules.
PrivateDependency: For internal use only.
Implement:
Create [ModuleName]Module.cpp (e.g., FooBarModule.cpp).
Use IMPLEMENT_MODULE(FDefaultModuleImpl, FooBar) for basic modules.
Override StartupModule()/ShutdownModule() for custom lifecycle logic.
Load:
Declare modules in .uproject/.uplugin files with:
Type: Runtime (game/editor), Editor (editor-only), etc.
Loading phase: Defaults to Default (e.g., PreDefault, PostConfigInit).
Platform/target filters: Whitelist/blacklist platforms.
Depend:
Add modules to dependency chains via:
Other modules’ Build.cs files (preferred).
ExtraModuleNames in Target.cs (if no dependencies exist).
- Critical Concepts
Module Main Class:
Extends IModuleInterface; lifetime tied to the module.
Accessed via FModuleManager::LoadModule().
Game Modules:
Use IMPLEMENT_GAME_MODULE for hot-reload support.
Only use if depending on other gameplay modules (avoids overhead).
Linking Errors:
Often caused by missing [MODULENAME]_API or module dependencies.
Error example: "unresolved external symbol [FunctionName]".
- Optimization & Best Practices
Precompiled Headers (PCH):
Private PCH: Define via PrivatePCHHeaderFile = "FooBarPrivatePCH.h" in Build.cs.
Shared PCH: Use engine-provided PCHs (e.g., Core, Engine) for efficiency.
Settings: PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs (default since UE 4.24.2).
Include What You Use (IWYU):
Mandatory since UE 4.24.2.
Requires explicit includes (e.g., #include "GameFramework/Actor.h" instead of monolithic Engine.h).
Enable via DefaultBuildSettings = BuildSettingsVersion.V2.
- Plugins
Collections of modules with enable/disable per project.
Create via editor (New Plugin) or engine’s BlankPlugin template.
- Troubleshooting
Missing Includes: Use full paths (e.g., GameFramework/Actor.h).
Linker Errors: Check exports (*_API) and dependencies.
Module Not Loading: Verify .uproject declaration and engine restart.