UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NativeGameplayTags.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Set.h"
7#include "CoreMinimal.h"
8#include "CoreTypes.h"
10#include "GameplayTagsManager.h"
12#include "UObject/NameTypes.h"
13
15
17{
18 // Used to prevent people from putting UE_DEFINE_GAMEPLAY_TAG_STATIC and UE_DEFINE_GAMEPLAY_TAG in their headers.
19 constexpr bool HasFileExtension(const char* File)
20 {
21 const char* It = File;
22 while (*It)
23 ++It;
24 return It[-1] == 'p' && It[-2] == 'p' && It[-3] == 'c' && It[-4] == '.';
25 }
26}
27
31#define UE_DECLARE_GAMEPLAY_TAG_EXTERN(TagName) extern FNativeGameplayTag TagName;
32
36#define UE_DEFINE_GAMEPLAY_TAG_COMMENT(TagName, Tag, Comment) FNativeGameplayTag TagName(UE_PLUGIN_NAME, UE_MODULE_NAME, Tag, TEXT(Comment), ENativeGameplayTagToken::PRIVATE_USE_MACRO_INSTEAD); static_assert(UE::GameplayTags::Private::HasFileExtension(__FILE__), "UE_DEFINE_GAMEPLAY_TAG_COMMENT can only be used in .cpp files, if you're trying to share tags across modules, use UE_DECLARE_GAMEPLAY_TAG_EXTERN in the public header, and UE_DEFINE_GAMEPLAY_TAG_COMMENT in the private .cpp");
37
41#define UE_DEFINE_GAMEPLAY_TAG(TagName, Tag) FNativeGameplayTag TagName(UE_PLUGIN_NAME, UE_MODULE_NAME, Tag, TEXT(""), ENativeGameplayTagToken::PRIVATE_USE_MACRO_INSTEAD); static_assert(UE::GameplayTags::Private::HasFileExtension(__FILE__), "UE_DEFINE_GAMEPLAY_TAG can only be used in .cpp files, if you're trying to share tags across modules, use UE_DECLARE_GAMEPLAY_TAG_EXTERN in the public header, and UE_DEFINE_GAMEPLAY_TAG in the private .cpp");
42
46#define UE_DEFINE_GAMEPLAY_TAG_STATIC(TagName, Tag) static FNativeGameplayTag TagName(UE_PLUGIN_NAME, UE_MODULE_NAME, Tag, TEXT(""), ENativeGameplayTagToken::PRIVATE_USE_MACRO_INSTEAD); static_assert(UE::GameplayTags::Private::HasFileExtension(__FILE__), "UE_DEFINE_GAMEPLAY_TAG_STATIC can only be used in .cpp files, if you're trying to share tags across modules, use UE_DECLARE_GAMEPLAY_TAG_EXTERN in the public header, and UE_DEFINE_GAMEPLAY_TAG in the private .cpp");
47
48#ifndef UE_INCLUDE_NATIVE_GAMEPLAYTAG_METADATA
49 #define UE_INCLUDE_NATIVE_GAMEPLAYTAG_METADATA WITH_EDITOR && !UE_BUILD_SHIPPING
50#endif
51
59{
60public:
62
63public:
64 GAMEPLAYTAGS_API FNativeGameplayTag(FName PluginName, FName ModuleName, FName TagName, const FString& TagDevComment, ENativeGameplayTagToken);
66
67 operator FGameplayTag() const { return InternalTag; }
68
69 FGameplayTag GetTag() const { return InternalTag; }
70
72 {
73#if !UE_BUILD_SHIPPING
74 ValidateTagRegistration();
75#endif
76
77#if WITH_EDITORONLY_DATA
79#else
80 return FGameplayTagTableRow(InternalTag.GetTagName());
81#endif
82 }
83
84#if UE_INCLUDE_NATIVE_GAMEPLAYTAG_METADATA
85 FName GetPlugin() const { return PluginName; }
86 FName GetModuleName() const { return ModuleName; }
87 FName GetModulePackageName() const { return ModulePackageName; }
88#else
90 FName GetPlugin() const { return NAME_None; }
92#endif
93
94private:
95 FGameplayTag InternalTag;
96
97#if !UE_BUILD_SHIPPING
98 FName PluginName;
99 FName ModuleName;
100 FName ModulePackageName;
101 mutable bool bValidated = false;
102
103 GAMEPLAYTAGS_API void ValidateTagRegistration() const;
104#endif
105
106#if WITH_EDITORONLY_DATA
107 FString DeveloperComment;
108#endif
109
110 static GAMEPLAYTAGS_API TSet<const class FNativeGameplayTag*>& GetRegisteredNativeTags();
111
113};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ENativeGameplayTagToken
Definition NativeGameplayTags.h:14
Definition NameTypes.h:617
Definition NativeGameplayTags.h:59
GAMEPLAYTAGS_API ~FNativeGameplayTag()
Definition NativeGameplayTags.cpp:79
FGameplayTag GetTag() const
Definition NativeGameplayTags.h:69
FName GetModulePackageName() const
Definition NativeGameplayTags.h:91
static GAMEPLAYTAGS_API FName NAME_NativeGameplayTag
Definition NativeGameplayTags.h:61
FGameplayTagTableRow GetGameplayTagTableRow() const
Definition NativeGameplayTags.h:71
FName GetPlugin() const
Definition NativeGameplayTags.h:90
FName GetModuleName() const
Definition NativeGameplayTags.h:89
Definition UnrealTemplate.h:321
Definition GameplayTagsManager.h:330
Definition GameplayTagsManager.cpp:2238
constexpr bool HasFileExtension(const char *File)
Definition NativeGameplayTags.h:19
Definition GameplayTagsManager.h:34
Definition GameplayTagContainer.h:45
FName GetTagName() const
Definition GameplayTagContainer.h:183