Skip to content
Skillpedia
General coding48k · #4447

unreal-engine-cpp-pro

Guides your agent in C++ development for Unreal Engine. It teaches best practices to optimize code and ensure good game performance.

What it does

This guide helps you write C++ code for the Unreal Engine 5 game. It teaches best practices to make your code safer, faster, and more organized, following the game's rules.

When to use it

  • ✓When you are programming in C++ for Unreal Engine 5.
  • ✓When creating game parts like characters or items.
  • ✓If you need to optimize your code's performance or fix bugs.

Example of what to ask your AI

“How can I ensure my C++ code for Unreal Engine 5 follows best practices?”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/unreal-engine-cpp-pro/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/unreal-engine-cpp-pro/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The guide explains how to use Unreal Engine's tools correctly, how to manage memory to avoid problems, and how to organize your code so it runs well and is easy to understand.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill unreal-engine-cpp-pro

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/unreal-engine-cpp-pro/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Unreal Engine C++ Pro

This skill provides expert-level guidelines for developing with Unreal Engine 5 using C++. It focuses on writing robust, performant, and standard-compliant code.

When to Use

Use this skill when:

  • Developing C++ code for Unreal Engine 5.x projects
  • Writing Actors, Components, or UObject-derived classes
  • Optimizing performance-critical code in Unreal Engine
  • Debugging memory leaks or garbage collection issues
  • Implementing Blueprint-exposed functionality
  • Following Epic Games' coding standards and conventions
  • Working with Unreal's reflection system (UCLASS, USTRUCT, UFUNCTION)
  • Managing asset loading and soft references

Do not use this skill when:

  • Working with Blueprint-only projects (no C++ code)
  • Developing for Unreal Engine versions prior to 5.x
  • Working on non-Unreal game engines
  • The task is unrelated to Unreal Engine development

Core Principles

  1. UObject & Garbage Collection:

    • Always use UPROPERTY() for UObject* member variables to ensure they are tracked by the Garbage Collector (GC).
    • Use TStrongObjectPtr<> if you need to keep a root reference outside of a UObject graph, but prefer addToRoot() generally.
    • Understand the IsValid() check vs nullptr. IsValid() handles pending kill state safely.
  2. Unreal Reflection System:

    • Use UCLASS(), USTRUCT(), UENUM(), UFUNCTION() to expose types to the reflection system and Blueprints.
    • Minimize BlueprintReadWrite when possible; prefer BlueprintReadOnly for state that shouldn't be trampled by logic in UI/Level BPs.
  3. Performance First:

    • Tick: Disable Ticking (bCanEverTick = false) by default. Only enable it if absolutely necessary. Prefer timers (GetWorldTimerManager()) or event-driven logic.
    • Casting: Avoid Cast<T>() in hot loops. Cache references in BeginPlay.
    • Structs vs Classes: Use F structs for data-heavy, non-UObject types to reduce overhead.

Naming Conventions (Strict)

Follow Epic Games' coding standard:

  • Templates: Prefix with T (e.g., TArray, TMap).
  • UObject: Prefix with U (e.g., UCharacterMovementComponent).
  • AActor: Prefix with A (e.g., AMyGameMode).
  • SWidget: Prefix with S (Slate widgets).
  • Structs: Prefix with F (e.g., FVector).
  • Enums: Prefix with E (e.g., EWeaponState).
  • Interfaces: Prefix with I (e.g., IInteractable).
  • Booleans: Prefix with b (e.g., bIsDead).

Common Patterns

1. Robust Component Lookup

Avoid GetComponentByClass in Tick. Do it in PostInitializeComponents or BeginPlay.

void AMyCharacter::PostInitializeComponents() {
    Super::PostInitializeComponents();
    HealthComp = FindComponentByClass<UHealthComponent>();
    check(HealthComp); // Fail hard in dev if missing
}

2. Interface Implementation

Use interfaces to decouple systems (e.g., Interaction system).

// Interface call check
if (TargetActor->Implements<UInteractable>()) {
    IInteractable::Execute_OnInteract(TargetActor, this);
}

3. Async Loading (Soft References)

Avoid hard references (UPROPERTY(EditDefaultsOnly) TSubclassOf<AActor>) for massive assets which force load orders. Use TSoftClassPtr or TSoftObjectPtr.

UPROPERTY(EditAnywhere, BlueprintReadWrite)
TSoftClassPtr<AWeapon> WeaponClassToLoad;

void AMyCharacter::Equip() {
    if (WeaponClassToLoad.IsPending()) {
        WeaponClassToLoad.LoadSynchronous(); // Or use StreamableManager for async
    }
}

Debugging

  • Logging: Use UE_LOG with custom categories.
    DEFINE_LOG_CATEGORY_STATIC(LogMyGame, Log, All);
    UE_LOG(LogMyGame, Warning, TEXT("Health is low: %f"), CurrentHealth);
    
  • Screen Messages:
    if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Died!"));
    
  • Visual Logger: extremely useful for AI debugging. Implement IVisualLoggerDebugSnapshotInterface.

Checklist before PR

  • Does this Actor need to Tick? Can it be a Timer?
  • Are all UObject* members wrapped in UPROPERTY?
  • Are hard references (TSubclassOf) causing load chains? Can they be Soft Ptrs?
  • Did you clean up verified delegates in EndPlay?

Limitations

  • Use this skill only when the task clearly matches the scope described above.

…

FAQ

What is 'Garbage Collection'?

It's an automatic system that cleans up memory that is no longer being used by the game, preventing it from slowing down or crashing.

Why is it important to use 'UPROPERTY()?'

Using 'UPROPERTY()' ensures that the 'Garbage Collector' knows which memory objects are important and doesn't accidentally delete them.

What does 'disabling Tick' mean?

The 'Tick' is a function that runs every frame of the game. Disabling it when not needed saves resources and improves performance.

Details

Original description by the author

Expert guide for Unreal Engine 5.x C++ development, covering UObject hygiene, performance patterns, and best practices.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#4447
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills