当前位置: 首页 > news >正文

UE5 C++ 反射 运行时获取类和字符串的信息

一.首先我们在上篇文章的基础上,再创建一个GameMode

在里面去拿 反射的类的信息,也就时 元数据的 具体信息

二.如何

首先我们需要创建一个UStudent类,它本身拥有反射的。

接着使用UClass ,指向这个 UStudent 类。

1.使用GetClass() 获取反射类的类型,而这个方法来自于UObjectBase,经常看大钊的UObject的应该很熟悉这个。

源代码注释里说明了,它是UObject更下一层级的接口。上面几个U开头的类都要用它。

2.同理GetFName,也是UObjectBase里的方法。不过它是获取反射类的名字

3.获得UPROPERTY名字,的 FField::GetName()

而UFileld是专门管理 反射对象的 

这里截取inside UE4的一些思考,(38 封私信 / 80 条消息) 《InsideUE4》UObject(三)类型系统设定和结构 - 知乎

4. 获得Property的类型, GetCPPTpe().

再升入可以发现,它是泛型的。每个类型都有自己的GetCPPType()

5.测试代码 在GameMode里测试Student,的运行时,获得它的属性,类信息

#include "ReflectionGameModeBase.h"
#include "Student.h"AReflectionGameModeBase::AReflectionGameModeBase()
{UE_LOG(LogTemp,Warning,TEXT("Helleo Reflection"));UStudent* Student = NewObject<UStudent>();UClass* StudentClass = Student->GetClass(); //获取类FName ClassName = StudentClass->GetFName(); //获取类名称UE_LOG(LogTemp,Warning,TEXT("Student's classname is %s"),*ClassName.ToString());for (FProperty* Property = StudentClass->PropertyLink; Property; Property = Property->PropertyLinkNext){FString PropertyName = Property->GetName(); //运行时获得属性名FString PropertyType = Property->GetCPPType(); //运行时获得属性类型if (PropertyType == "FString"){FStrProperty* StringProperty = CastField<FStrProperty>(Property);  //转换为字符串类型void* Addr = StringProperty->ContainerPtrToValuePtr<void>(Student); //从容器到值的结构,一个类有一份但是值有多份。FString PropertyValue = StringProperty->GetPropertyValue(Addr);//StringProperty->GetPropertyValue(Addr);UE_LOG(LogTemp, Warning, TEXT("Student's Properties has %s Type is %s Value is %s"), *PropertyName, *PropertyType, *PropertyValue);}int32 a = 1;}int32 a = 1;
}

http://www.dtcms.com/a/577262.html

相关文章:

  • Vue 3 中 ref 和 reactive 的区别与使用场景
  • 和规划网站如何产品推广会议流程
  • LVS/IPVS与Keepalived在云原生环境中的深度学习与实践(一)
  • 汽车信息安全--关于安全强度的误区
  • .NET Framework 4.8 + Microsoft.Data.Sqlite 报 Library e_sqlite3 not found
  • 力扣1539. 第 k 个缺失的正整数
  • 珠海移动网站建设公司洛阳网站备案
  • 建站公司最新排名收费做网站
  • MATLAB实现的金字塔光流算法
  • 喜报 | 金口良策荣膺2025金熊猫全球创新创业大赛初创组优秀奖
  • 段描述符(Segment Descriptor)
  • 广西北海网站建设淘宝seo是指
  • MATLAB 使用经验帖
  • 资金盘网站开发多少钱一般纳税人企业所得税怎么征收
  • 先进核技术:未来能源革命的核心驱动力
  • 基于MATLAB的飞机姿态数据分析与轮胎轴承横向位移关键特征识别
  • 网站dns查询超大尺寸哔哩哔哩网站
  • 视频流画线 视频流画多边形
  • TinyTroupe:微软开源的轻量级多智能体“人格”模拟库(一)
  • 【计算机组成原理】计算机系统概述:从发展历程到工作原理
  • DOM Text
  • ARM《10》_01_字符设备驱动基础、学习开发字符驱动内核程序、总结规律和模板
  • 从灵光到落地:用 ModelEngine 可视化编排「会议纪要智能体」——全程 0 代码,2 小时上线!
  • FastAPI 基础入门-章节五(Pydantic的使用)
  • C/C++图形库_EasyX 环境配置(VSCode+MinGW )
  • 优化网站关键词优化page wordpress
  • 简单并完全免费的方法-让夸克网盘不限速下载
  • Vue 指令系统深度解析:条件渲染的艺术(v-if/v-else-if/v-else 与 v-show 的实战指南)
  • 【Linux】Reactor反应堆模式
  • iOS 上架费用全解析 开发者账号、App 审核、工具使用与开心上架(Appuploader)免 Mac 成本优化指南