Resource
How to name functions, variables, parameters, booleans, delegates, and event dispatchers so they match what the engine and other developers expect.
All identifiers in Unreal Engine use PascalCase. This applies to functions, variables, class names, enums, and namespaces. Underscores appear only in macro names. The b prefix for booleans attaches directly to the capitalized name with no separator: bIsAlive, not b_IsAlive.
GetPlayerHealth()GoodPascalCase, verb-noun patternget_player_health()BadSnake case, not used in UEgetPlayerHealth()BadcamelCase, not used in UEPlayerHealthGoodPascalCase variableplayerHealthBadcamelCase is not the UE conventionplayer_healthBadSnake case is not the UE conventionFunctions describe actions. Start with a verb, follow with the object being acted on. Omit the object only when it's obvious from context (for example, a UHealthComponent can have GetHealth() instead of GetComponentHealth()).
GetReturn a value without side effectsGetAmmoCount()SetAssign a valueSetMaxHealth()Is / Has / CanBoolean queriesIsAlive(), HasAmmo(), CanFire()FindLookup that may fail (return pointer or optional)FindInventoryItem()TryOperation that can fail, returns boolTryActivateAbility()Handle / OnRespond to an event or delegate callback. Epic uses both interchangeably.HandleDamageReceived(), OnHealthChanged()Init / InitializeOne-time setup logic. Init for short lifecycle names, Initialize for compound names.InitGame(), InitializeComponent()Begin / EndPaired lifecycle operationsBeginPlay(), EndPlay()Create / DestroyObject lifecycleCreateWidget(), DestroyComponent()Apply / RemoveStateful changesApplyDamage(), RemoveStatusEffect()CalculateDerive a value from inputsCalculateDamage()Blueprint event graph functions follow the same verb-noun pattern. Custom events use the same naming as delegates they're bound to. Pure functions (const, no side effects) get a green node in Blueprint and don't need a verb prefix when they describe a property.
Variables are nouns or noun phrases in PascalCase. They describe what the value _is_, not what it does. Avoid generic names like Data, Info, or Temp unless the scope is genuinely tiny.
bIsAlive, bCanFire, bHasAmmoMaxHealth, FireRate, DamageMultiplierPlayerName, ErrorMessageOwningActor, TargetComponentActiveEffects, SpawnPoints, CachedResultsDamageByType, WidgetsByNameVisitedNodes, ActiveTagsRegenTimerHandleWeaponMesh, CharacterClassDelegate type names describe the signature, not the instance. The instance name describes the specific event.
FOnHealthChangedOnHealthChanged, OnDeathOnItemPickedUp, OnLevelCompleteOnDamageReceivedFunction parameters follow the same naming rules as variables. Output parameters use the Out prefix so callers know the function writes to them.
DamageAmount, TargetActorOutHitResult, OutDamageDealtconst FVector& LocationDamageType, InstigatorControllerDmg, AmtiCount, fSpeed, strNameData, Info, Temp, Result, ManagerHealthFloat, NameStringOnDamage, OnDied, OnHealthChangeRelated Content