Skip to main content
System decisionGameplay

Gameplay Tag, Enum, Name, or Boolean?

Represent state with the smallest type that preserves its valid combinations and query needs.

Gameplay TagEnumFNameBoolean

Recommendation

Use a Boolean for one independent yes or no fact, an Enum for one value from a closed set, a Name for an opaque identifier, and Gameplay Tags for hierarchical labels and set-based queries.

Compare the options

Boolean

Choose when

  • One fact is independently true or false.
  • The fact does not overlap with a larger state set.

Tradeoffs

  • Several related booleans can permit invalid combinations.
  • A bool carries no category or hierarchy.
Blueprint
Use a Boolean variable.
C++
Use bool.

Enum

Choose when

  • Exactly one value from a small closed set is valid.
  • The set changes through code or asset type updates.

Tradeoffs

  • One Enum does not represent several simultaneous states.
  • Adding values changes the declared type.
Blueprint
Use a Blueprint Enum or a native Enum exposed to Blueprint.
C++
Declare a reflected UENUM.

Name

Choose when

  • The value is an efficient identifier.
  • Hierarchy, registration, containers, and tag queries are unnecessary.

Tradeoffs

  • Project code must validate spelling and meaning.
  • FName has no built-in gameplay hierarchy.
Blueprint
Use a Name variable.
C++
Use FName.

Gameplay Tag

Choose when

  • Labels are hierarchical.
  • Several labels may coexist.
  • Designers extend the dictionary or queries need any, all, and none rules.

Tradeoffs

  • The project needs a managed tag dictionary and naming policy.
  • Loose tag creation can produce duplicate concepts.
Blueprint
Use Gameplay Tag, Gameplay Tag Container, Has Tag, Has Any, Has All, and Gameplay Tag Query.
C++
Use FGameplayTag, FGameplayTagContainer, FGameplayTagQuery, and native tag declarations.

Requirements

Gameplay Tags use the GameplayTags module. Add GameplayTags to Build.cs for C++ access.

Example

Use an Enum when only one Movement Mode can be active. Use Tags for State.Stunned, State.Burning, and Ability.Blocked.Movement because several can coexist and parent queries matter.

Epic documentation

Related guides

Unreal Directive is free and ad-free.

If it saved you time, you can help keep it that way.

Donate