Back to Architecture & Design Patterns

Unreal Engine C++ Professional

unrealcppgamedevperformanceue5
4.3 (25)40.9k📄 MIT🕒 2026-06-16Source ↗

Install this skill

npx skills add sickn33/antigravity-awesome-skills

Works across Claude Code, Cursor, Codex, Copilot & Antigravity

What this skill does

  • Enforces strict Unreal Engine C++ naming conventions and class prefixes
  • Guides safe memory management through UProperty and Garbage Collector best practices
  • Optimizes engine performance by replacing unnecessary ticks with timer-based logic
  • Facilitates decoupled systems using interface implementation patterns
  • Implements efficient async asset loading via Soft Object and Class pointers

When to use it

  • Refactoring existing actor classes to reduce memory overhead
  • Implementing new game features requiring Blueprint-to-C++ communication
  • Debugging performance regressions or high CPU usage in game components
  • Establishing standardized coding patterns for new Unreal Engine project modules

When not to use it

  • Non-Unreal Engine C++ projects or libraries
  • Blueprint-only scripting tasks that do not involve C++ class definitions
  • Projects using engine versions prior to Unreal Engine 5.0

How to invoke it

Example prompts that trigger this skill:

  • Review this actor class to ensure all members are properly garbage collected.
  • Convert hard asset references in this component to TSoftObjectPtr for better loading performance.
  • Apply Epic Games coding standards to this header file.
  • Help me optimize this tick-heavy component using a timer instead.
  • Refactor this system to use an interface for better decoupling.

Example workflow

  1. Identify a component that suffers from high CPU usage during runtime.
  2. Evaluate the necessity of the Tick function using this skill's criteria.
  3. Replace the Tick logic with a timer-based or event-driven approach.
  4. Verify that all relevant UObjects are correctly marked with UPROPERTY.
  5. Audit the header file against the naming convention requirements.
  6. Run a final check to confirm no hard references are blocking asset loading.

Prerequisites

  • Unreal Engine 5.x installed
  • Active C++ project environment
  • Basic familiarity with Visual Studio or Rider for Unreal

Pitfalls & limitations

  • !Over-reliance on UPROPERTY can lead to circular dependency issues if not managed.
  • !Incorrect interface implementation can cause silent failures in the editor.
  • !Switching to soft references adds complexity to the loading lifecycle.

FAQ

Why should I avoid using Cast in the Tick function?
Casting is a relatively expensive operation to perform every frame. Caching your references during BeginPlay or PostInitializeComponents significantly improves overall frame time.
Is bCanEverTick = false always mandatory?
It is highly recommended for performance. Unless an actor requires frame-by-frame updates, using timers or custom events is significantly lighter on the engine.
How do I safely check if a UObject is valid?
Always use the IsValid() function rather than checking for a null pointer. IsValid() handles the pending-kill state, which ensures the object is actually ready for use.

How it compares

Generic coding assistants often suggest standard C++ practices that ignore Unreal's unique garbage collection and reflection requirements; this skill forces adherence to engine-specific performance patterns.

Source & trust

41k stars📄 MIT🕒 Updated 2026-06-16🛡 no risky patterns found

From the source: “# 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, Compone…”

View the full SKILL.md source

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

```cpp
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).

```cpp
// 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`.

```cpp
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.
    ```cpp
    DEFINE_LOG_CATEGORY_STATIC(LogMyGame, Log, All);
    UE_LOG(LogMyGame, Warning, TEXT("Health is low: %f"), CurrentHealth);
    ```
*   **Screen Messages**:
    ```cpp
    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.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Quoted from sickn33/antigravity-awesome-skills for reference — see the original for the authoritative, latest version.

📄 Full skill instructions — original source: sickn33/antigravity-awesome-skills
This skill provides a structured framework for Unreal Engine 5.x C++ development. It focuses on memory safety, efficient asset management, and adherence to Epic Games' strict naming and architectural standards. By following these guidelines, developers ensure their projects maintain performance integrity through proper garbage collection, disciplined use of the reflection system, and optimized component handling. The skill helps agents avoid common traps like excessive ticking or hard-coded asset references, which often lead to memory bloat and difficult-to-track bugs. It is ideal for teams or solo developers who require consistent, production-ready code that integrates naturally with the Unreal Editor while remaining maintainable for long-term project lifecycles. This content acts as a bridge between high-level architectural goals and low-level C++ implementation details within the Unreal Engine environment.

How to Use This Skill Unit

Option A: Project-Specific (Recommended)

  1. Click "Download" above
  2. In your project, create the directory: .agent/skills/unreal-engine-cpp-pro/
  3. Save the file as SKILL.md
  4. The agent will automatically discover the skill based on its description.

Option B: Global Installation (All Agents)

Save the file to these locations to make it available across all projects:

  • Claude Code: ~/.claude/skills/sickn33/antigravity-awesome-skills/unreal-engine-cpp-pro/SKILL.md
  • Cursor: ~/.cursor/skills/sickn33/antigravity-awesome-skills/unreal-engine-cpp-pro/SKILL.md
  • Antigravity: ~/.gemini/antigravity/skills/sickn33/antigravity-awesome-skills/unreal-engine-cpp-pro/SKILL.md

🚀 Install with CLI:
npx skills add sickn33/antigravity-awesome-skills

Read the Master Guide: Mastering Agent Skills

Recommended Rules

View more rules

Recommended Workflows

View more workflows

Recommended MCP Servers

View more MCP servers

Take It Further

Maximize your productivity with these powerful resources

📋

Define Your Standards

Set up coding standards to ensure this workflow produces consistent, high-quality results.

Browse Rules Library
📖

Master Workflows

Learn how to create custom workflows, use Turbo Mode, and build your automation library.

Complete Guide

How to use this Skill in Claude Code & Cursor

For Claude Code (CLI)

To use this skill in Claude Code, copy the rule content into your project's custom instructions or follow our Add-Skill CLI guide. This ensures Claude follows your standards during every code generation.

For Cursor & Windsurf

For Cursor or Windsurf, individual skills are best used in the "Rules for AI" section. This specific unit helps the agent avoid architecture & design patterns issues, leading to cleaner, more efficient code.

Why the skill format matters: the standardized Agent Skills format lets your AI agent load detailed instructions only when they are relevant, keeping your prompt clean while improving results.

Source & attribution

This skill is categorized under Architecture & Design Patterns and is published by sickn33, maintained in sickn33/antigravity-awesome-skills.

← Browse All Agent Skills
Sponsored AI assistant. Recommendations may be paid.