agentleFS
maystudiosmaystudios/claude-skills/unreal-best-practices/SKILL.md

unreal-best-practices

Skill21 starsChanged 7 months agoMITView on GitHub

Comprehensive best practices guide for modern Unreal Engine 5.x development. Covers Epic's strategic direction toward modern systems (GAS, Enhanced Input, StateTree, MetaSounds, Niagara, PCG, CommonUI, World Partition, Game Feature Plugins, Gameplay Tags), the "research first" philosophy of always checking for newer UE systems before implementing, C++ vs Blueprint decision making, data-driven design, asset management, project organization, naming conventions, performance optimization, and debugging with Unreal Insights. Use when the user asks about UE best practices, modern UE5 workflows, which system to use, old vs new UE systems, recommended approaches, project setup, code organization, performance tips, Blueprint vs C++ decisions, naming conventions, or when starting a new feature and needing guidance on the right UE system to use. Also triggers when the user asks whether there is a newer/better way to do something in Unreal Engine, or when comparing legacy systems against modern replacements. Covers deprecated systems and their migration paths.

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 7 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈7

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check the Modern Systems Quick Reference below

    line 26
  2. Distinctive:

    If uncertain, search Epic's documentation and the UE Public Roadmap for the latest system status

    line 27
  3. Distinctive:

    Prefer production-ready modern systems over legacy approaches

    line 28
  4. Distinctive:

    Avoid Event Tick -- use timers, events, and delegates instead (20-30% perf improvement)

    line 104
  5. Distinctive:

    Use Blueprint Interfaces over casting for cross-Blueprint communication (avoids hard references)

    line 105
  6. Very specific:

    Use TSoftObjectPtr<> for assets not immediately needed (prevents memory bloat)

    line 106
  7. Distinctive:

    Use timers and events instead of per-frame polling

    line 151
  8. Distinctive:

    Use Nanite for static geometry -- eliminates manual LOD creation

    line 153
  9. Very specific:

    Use COND_* flags on replicated properties to minimize network bandwidth

    line 155

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Unreal Engine 5.x Best Practices Guide

The "Research First" Principle

Before implementing any gameplay system, always investigate whether Epic provides a newer, purpose-built system for it. Epic Games continuously introduces modern frameworks that replace ad-hoc solutions. Using the latest recommended system yields better performance, easier networking, designer-friendly workflows, and future compatibility.

Workflow:

  1. Identify the problem domain (input, abilities, audio, particles, AI, UI, movement, etc.)
  2. Check the Modern Systems Quick Reference below
  3. If uncertain, search Epic's documentation and the UE Public Roadmap for the latest system status
  4. Prefer production-ready modern systems over legacy approaches
  5. For experimental systems: evaluate maturity before committing -- use them in prototypes, not shipping builds

Why this matters: Epic signals their direction through actions, not just announcements. When they rebuild the First/Third Person templates to use GAS and Enhanced Input, or when Fortnite ships with Game Feature Plugins and CommonUI, that is the clearest indicator of where the ecosystem is heading.

Official Documentation (always consult for latest details)

The Lyra Starter Game is Epic's canonical reference implementation for modern UE5 architecture. It demonstrates GAS, Enhanced Input, Game Feature Plugins, CommonUI, GameplayMessageSubsystem, Gameplay Tags, and modular gameplay patterns -- all derived from Fortnite's production codebase.

Modern Systems Quick Reference

See references/modern-systems.md for detailed information on each system, migration paths, and documentation links.

System status as of UE 5.7:

DomainLegacy/Old SystemModern SystemStatus
InputBindAction/BindAxisEnhanced InputProduction -- legacy deprecated since 5.1
AbilitiesAd-hoc booleans/timersGameplay Ability System (GAS)Production -- recommended for ability-driven games
State/ClassificationEnums, booleans, stringsGameplay TagsProduction -- foundation of modern UE
AI BehaviorBehavior TreesStateTreeProduction since 5.1 -- alternative, BTs still supported
AI InteractionManual scriptingSmart ObjectsProduction since 5.1
Particles/VFXCascadeNiagaraProduction -- Cascade deprecated since 5.0
AudioSoundCueMetaSoundsProduction (core) -- SoundCue not yet deprecated
Audio MixingStatic configAudio ModulationProduction
Rendering (Geometry)Manual LODsNaniteProduction since 5.0
Rendering (Lighting)Baked lightmapsLumenProduction since 5.0
Level StreamingWorld Composition / Level StreamingWorld PartitionProduction -- World Composition deprecated
UI (Multiplatform)Raw UMGCommonUI + UMGBeta (used in Fortnite)
MovementCharacterMovementComponentMover 2.0Experimental -- CMC still recommended
Procedural ContentManual/Blueprint scriptingPCG FrameworkProduction since 5.7
ArchitectureMonolithic modulesGame Feature PluginsProduction (Lyra/Fortnite)
MessagingDirect delegates/castingGameplayMessageSubsystemProduction (Lyra)
Animation (Locomotion)State machines/blend treesMotion Matching (PoseSearch)Experimental
Animation (Interaction)Manual montage syncMotion WarpingProduction-usable
Animation (Rigging)External DCC onlyControl RigProduction (core)
Asset SelectionHardcoded switch/if chainsChooser TablesBeta since 5.4
Networking (Large-scale)Default replicationIrisBeta since 5.7
DialogueThird-party pluginsCommonConversationExperimental (not recommended)

C++ and Blueprint Best Practices

See references/blueprint-and-cpp.md for detailed patterns, communication methods, and performance guidelines.

The gold standard pattern: Abstract C++ base + Blueprint subclass.

C++ (UCLASS(Abstract))                  Blueprint Subclass
+----------------------------------+    +---------------------------+
| Base class logic                 |    | Visual/gameplay config    |
| - Core systems & algorithms     |    | - Asset references        |
| - Networking & replication       |    | - Tuning values           |
| - Performance-critical code      |    | - Event responses         |
| - BlueprintImplementableEvent    |    | - Designer iteration      |
| - UPROPERTY(EditDefaultsOnly)   |    | - One-off behaviors       |
+----------------------------------+    +---------------------------+

Decision matrix:

  • C++: Base classes, systems, performance-critical code, networking, editor tools
  • Blueprint: Gameplay logic, configuration, prototyping, VFX triggers, UI layout
  • Both: C++ defines the framework, Blueprint fills in the gameplay details

Critical rules:

  • Avoid Event Tick -- use timers, events, and delegates instead (20-30% perf improvement)
  • Use Blueprint Interfaces over casting for cross-Blueprint communication (avoids hard references)
  • Use TSoftObjectPtr<> for assets not immediately needed (prevents memory bloat)
  • Cache references instead of searching every frame
  • Blueprint Nativization was removed in UE 5.0 -- manually convert hot paths to C++

Data-Driven Design

See references/data-driven-design.md for Data Tables, Data Assets, Primary Assets, Asset Manager, and Gameplay Tag patterns.

Core principle: Separate data from logic. Let designers configure without touching code.

Asset TypeBest ForKey Trait
Data TableLarge homogeneous datasets (100+ items)CSV/JSON import, FTableRowBase rows
Data AssetUnique complex definitions (bosses, skill trees)Full inheritance, UObject members
Primary Data AssetAssets with lifecycle managementAsset Manager integration, async loading
Gameplay TagsHierarchical state/classificationReplaces enums, designer-creatable

Gameplay Tags are fundamental -- use them for state management, ability classification, damage types, animation states, input binding, and cross-system communication. Always use FGameplayTagContainer over TArray<FGameplayTag>.

Project Organization

See references/project-organization.md for naming conventions, folder structure, and modular architecture patterns.

Naming convention prefixes (standard):

PrefixTypePrefixType
BP_BlueprintIA_Input Action
WBP_Widget BlueprintIMC_Input Mapping Context
DA_Data AssetGA_Gameplay Ability
DT_Data TableGE_Gameplay Effect
SM_Static MeshNS_Niagara System
SK_Skeletal MeshAM_Animation Montage
M_MaterialABP_Animation Blueprint
MI_Material InstanceBS_Blend Space
T_TextureS_Sound Wave

Folder structure: Feature-based, not asset-type-based.

Performance and Debugging

See references/performance-and-debugging.md for tick optimization, object pooling, GC management, profiling, and Unreal Insights.

Top performance rules:

  1. Disable tick on actors/components that don't need it (bCanEverTick = false)
  2. Use timers and events instead of per-frame polling
  3. Pool frequently spawned/destroyed actors (projectiles, particles)
  4. Use Nanite for static geometry -- eliminates manual LOD creation
  5. Profile with Unreal Insights (-trace=cpu,gpu,frame,counters), not guesswork
  6. Use COND_* flags on replicated properties to minimize network bandwidth
  7. Audit asset references with the Reference Viewer to prevent memory bloat

Key Design Patterns from Lyra

Lyra establishes these patterns as Epic's recommended architecture:

  1. Game Feature Plugins: Self-contained features that inject into the base game at runtime. One-way dependency -- core game never references features.
  2. Experience System: Async-loading game mode configurations built on Game Feature Plugins. Superior to traditional GameMode subclassing.
  3. GameplayMessageSubsystem: Tag-based publish-subscribe messaging. Eliminates tight coupling between gameplay systems.
  4. GAS + Gameplay Tags: Abilities defined via data, activated via tags, with tag-based blocking/cancellation.
  5. Enhanced Input + Tag Binding: Input Actions mapped to Gameplay Abilities via Gameplay Tags (not direct function calls).
  6. CommonUI: Platform-aware UI with automatic input device switching and focus management.
  7. Primary Data Assets + Asset Manager: Controlled async loading with bundle-based memory management.

Version-Specific Breaking Changes

Key changes affecting development practices:

  • UE 5.0: FVector → 3 doubles; TObjectPtr<> replaces raw pointers in UPROPERTY
  • UE 5.1: Enhanced Input becomes default; legacy input deprecated
  • UE 5.3: C++20 default for new projects; BuildSettingsVersion.V5
  • UE 5.5: Legacy stat profiler deprecated → use Unreal Insights; Zen Loader production-ready; Path Tracer production-ready
  • UE 5.6: Swarm Manager removed; FString::Appendf enforces static constexpr format strings; HWRT performance improved
  • UE 5.7: PCG Framework production-ready; Substrate production-ready; FindObject uses EFindObjectFlags; BuildSettingsVersion.V6

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.