#Wątek

1 messages · Page 1 of 1 (latest)

digital belfry
#
  1. 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.

  1. 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).

  1. 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]".

#
  1. 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.

#
  1. Plugins
    Collections of modules with enable/disable per project.

Create via editor (New Plugin) or engine’s BlankPlugin template.

  1. 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.