UE5 C++ 里创造 和 使用编辑GamePlayTag

一. 创建GamePlayTag

在蓝图里创建GamePlayTag非常容易,编辑器里点。但在C++里,稍微麻烦一丢丢。

还是老规矩,看官方文档。这里建议看5.4及以上版本,有更多C++的可以更新。

个人解读,首先是你必须有这个 Gameplay模块,其次在.h 和.cpp里使用 NativegameplayTags里的宏。而且这些宏不是随便放,有的只能在CPP里 用于定义,有的只能在.h 用于声明。之前没注意,随便用,结果死活找不到定义,后来发现是放错了地方。

1.UE_DECLARE_GAMEPLAY_TAG_EXTERN 只放在头文件,EXTERN(声明)。

2.UE_DEFINE_GAMEPLAY_TAG 只放在CPP里,DEFIN (实现定义)

3.UE_DEFINE_GAMEPLAY_TAG_COMMENT 只放在CPP里,可写注释DEFIN (实现定义)

4.UE_DEFINE_GAMEPLAY_TAG_STATIC 只放在CPP里,并且只用于这个文件不需要声明。毕竟名字里面有static,本地使用

二.案例测试

共有文件用于,写.H。这里在TagType里

cpp 复制代码
#include "NativeGameplayTags.h"

UE_DECLARE_GAMEPLAY_TAG_EXTERN(Movement_Mode_Working);
cpp 复制代码
#include "GWXTagType.h"

UE_DEFINE_GAMEPLAY_TAG_COMMENT(Movement_Mode_Working, "Movement.Mode.Working", "Working tag"); 

有WorkingTag的注释

cpp 复制代码
#include "TagActor.h"

UE_DEFINE_GAMEPLAY_TAG_STATIC(Movement_Mode_Fucking,"Movement.Mode.Fucking");

UE_DEFINE_GAMEPLAY_TAG_STATIC(XX_Mode_Idle, "XX.Mode.Idle");

在Container里加Tag

cpp 复制代码
public:
	UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XG")
	FGameplayTagContainer MyTagContainer;

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "XG")
	FGameplayTagContainer MyStatusTagContainer;
};
cpp 复制代码
void ATagActor::BeginPlay()
{
	Super::BeginPlay();
	MyTagContainer.AddTag(FGameplayTag::RequestGameplayTag(TEXT("Movement")));
	MyTagContainer.AddTag(XX_Mode_Idle);
}

运行后添加成功

三. 简化C++中的标签访问

1.定义

可能会在Lua中使用到。

继承IGameplayTagAssetInterface,并重写。容器里追加上两个 现有容器。

cpp 复制代码
void ATagActor::GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const
{
	TagContainer.AppendTags(MyTagContainer);

	TagContainer.AppendTags(MyStatusTagContainer);
}

2.其实相当于临时组建 TagContainer,追加了之前两个容器。并测试是否有一些标签。

相关推荐
h397415 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码17 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客17 小时前
vs 怎么根据dll 生成lib文件
c++·qt
程序员老陆18 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
半杯咖啡半行码1 天前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
xh didida1 天前
Linux -- 基础IO
linux·服务器·开发语言·c++
垆边人似月.1 天前
华为机试题 :两数之和
c++·算法·华为
个 人 练 习 生1 天前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
垆边人似月.1 天前
华为机试题 :有效的括号
c++·算法·华为
坤坤子吖1 天前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习