OverviewHistoryStatsSecurity
npx skills add ...
Documentation
SKILL.md
npx skills add sickn33/agentic-awesome-skills --skill unreal-engine-cpp-pro
Expert guide for Unreal Engine 5.x C++ development, covering UObject hygiene, performance patterns, and best practices.
npx skills add sickn33/agentic-awesome-skills --skill unreal-engine-cpp-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.
Use this skill when:
Do not use this skill when:
UObject & Garbage Collection:
UPROPERTY() for UObject* member variables to ensure they are tracked by the Garbage Collector (GC).TStrongObjectPtr<> if you need to keep a root reference outside of a UObject graph, but prefer addToRoot() generally.IsValid() check vs nullptr. IsValid() handles pending kill state safely.Unreal Reflection System:
UCLASS(), USTRUCT(), UENUM(), UFUNCTION() to expose types to the reflection system and Blueprints.BlueprintReadWrite when possible; prefer BlueprintReadOnly for state that shouldn't be trampled by logic in UI/Level BPs.Performance First:
bCanEverTick = false) by default. Only enable it if absolutely necessary. Prefer timers (GetWorldTimerManager()) or event-driven logic.Cast<T>() in hot loops. Cache references in BeginPlay.F structs for data-heavy, non-UObject types to reduce overhead.Follow Epic Games' coding standard:
T (e.g., TArray, TMap).U (e.g., UCharacterMovementComponent).A (e.g., AMyGameMode).S (Slate widgets).F (e.g., FVector).E (e.g., EWeaponState).I (e.g., IInteractable).b (e.g., bIsDead).Avoid GetComponentByClass in Tick. Do it in PostInitializeComponents or BeginPlay.
Use interfaces to decouple systems (e.g., Interaction system).
Avoid hard references (UPROPERTY(EditDefaultsOnly) TSubclassOf<AActor>) for massive assets which force load orders. Use TSoftClassPtr or TSoftObjectPtr.
UE_LOG with custom categories.
IVisualLoggerDebugSnapshotInterface.UObject* members wrapped in UPROPERTY?EndPlay?// Interface call check
if (TargetActor->Implements<UInteractable>()) {
IInteractable::Execute_OnInteract(TargetActor, this);
}UPROPERTY(EditAnywhere, BlueprintReadWrite)
TSoftClassPtr<AWeapon> WeaponClassToLoad;
void AMyCharacter::Equip() {
if (WeaponClassToLoad.IsPending()) {
WeaponClassToLoad.LoadSynchronous(); // Or use StreamableManager for async
}
}