UE4 反射 学习笔记

news2024/11/25 8:17:25

想让类具有反射机制,必须要有这四个要素:

1、generated.h文件

2、UCLASS()宏

3、继承自UObject

4、GENERATED_BODY()


void ABlurCharacter::BeginPlay()
{
	Super::BeginPlay();

	ABlurCharacter *BlurCharacter = NewObject<ABlurCharacter>();
	UClass *BlurCharacterClass = BlurCharacter->GetClass();
	FName BlurCharacterName = BlurCharacterClass->GetFName();

	GEngine->AddOnScreenDebugMessage(-1, 10.f ,FColor::Red, *BlurCharacterName.ToString());
}

这样就将类名给输出出来了 


for(UProperty *Per = BlurCharacterClass->PropertyLink; Per; Per = Per->PropertyLinkNext)
	{
		if(Per->GetCPPType() == TEXT("FString"))
		{
			UStrProperty *Str = Cast<UStrProperty>(Per);
			void *Addr = Str->ContainerPtrToValuePtr<void>(BlurCharacter);  //从容器信息转变成具体值
			GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Yellow, Per->GetName() + TEXT(" ------ ") + Per->GetCPPType() +
				TEXT(" ------ ") + Str->GetPropertyValue(Addr));
            Str->SetPropertyValue(Addr, "AfterModified");
			GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Yellow, Per->GetName() + TEXT(" ------ ") + Per->GetCPPType() +
				TEXT(" ------ ") + Str->GetPropertyValue(Addr));
		}
	}
UPROPERTY()
	FString Hello = "Hello World";

获取类中FString类型的值、类型、和名称,根据代码可以看出,存储变量的数据结构是一个链表,注意,变量一定要用UPROPERTY()给包裹,不然不会将变量信息反射到链表,更不可能存取这些信息


for(TFieldIterator<UFunction> Iter(BlurCharacterClass); Iter; ++Iter)
	{
		GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Blue, Iter->GetName());
		for(TFieldIterator<UProperty> Iter1(*Iter); Iter1; ++Iter1)
		{
			GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Black, Iter1->GetName() + TEXT(" ------ ") + Iter1->GetCPPType());
		}
	}

同理,自己写的函数也必须加入UFUNCTION()


void ABeginInvokeGameModeBase::BeginPlay() {
	Super::BeginPlay();

	AAFloorSwitch* FloorSwitch = NewObject<AAFloorSwitch>();

	UClass* Father = FloorSwitch->GetClass()->GetSuperClass();
	FString Name = Father->GetName();
	GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, Name);
}
UCLASS()
class MYCTEST_API AAFloorSwitch : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AAFloorSwitch();
}

在GameMode进行获取父类,在Actor内获取被隐藏


判断一个类是否是另一个类的父类


查找一个类的所有子类,第三个参数是找是否找子类的类,是否递归去找 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直线检测算法汇总分析

直线检测算法汇总 1、场景需求 在计算机视觉领域&#xff0c;我们经常需要做一些特殊的任务&#xff0c;而这些任务中经常会用到直线检测算法&#xff0c;比如车道线检测、长度测量等。尽管直线检测的任务看起来比较简单&#xff0c;但是在具体的应用过程中&#xff0c;你会发…

MySQL50题

四张表&#xff1a; 1.学生表 Student&#xff08;s_id,s_name,s_birth,s_sex) 2.课程表Course(c_id,c_name,t_id) 3.教师表Teacher&#xff08;t_id&#xff0c;t_name) 4.成绩表Score(s_id,c_id,s_score) 建表语句&#xff1a; 创建学生表并且往表中插入语句 CREATE TABL…

如何下载通达信接口 费用如何?

之前我分享了自编的一些通达信指标公式。经粉丝咨询&#xff0c;我发现自己疏忽了一个问题&#xff1a;许多人不知道如何下载/使用通达信接口软件&#xff01; 通达信软件PC版&#xff0c;有以下两种形态&#xff1a; 第一种形态是官方版。 官方版的软件下载链接在这里&…

C语言—文件操作(学好文件操作,再也不用担心数据丢失)

专栏&#xff1a;C语言 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些C语言的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 文件操作前言一、为什么使用文件二、什么是文件1.…

Leetcode:538. 把二叉搜索树转换为累加树(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 反中序遍历法&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&…

共享模型之管程(九)

1.ReentrantLock可重入锁 1.1.简介 1>.可重入是指同一个线程如果首次获得了这把锁,那么由于它是这把锁的拥有者,因此该线程有权利(/优先)再次获取这把锁;如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住; ReentrantLock底层也是基于Monitor对象实现的,只不过它是在…

java支持的数据类型2023006

Java语言支持的类型分为两类&#xff1a;基本类型&#xff08;Primitive Type&#xff09;和引用类型&#xff08;Reference Type&#xff09;。 –基本类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括byte、short、int、long、char&#xff0c;浮…

dp(九)不同的子序列

不同的子序列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目&#xff0c;配有官方题解&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/ed2923e49d3d495f83…

Vue知识系列-axios

一、axios基础知识 axios是独立于vue的一个项目&#xff0c;基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成ajax请求的发送在node.js中可以向远程接口发送请求 二、axios应用场景 三、axios的使用 第一步&#xff1a;创建html文件&#xff0c;在…

6.见过最强的后台管理系统

芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管理后台的移动端采用 uni-…

虹科方案 | 医药行业专用ECOLOG即插即用室内和设施环境监控系统

虹科ELPRO ECOLOG Plug&Play 连续监测解决方案采用功能强大的新ECOLOG-PRO硬件模块和ECOLOG-PRO Base服务器解决方案。即插即用是虹科ELPRO室内和设施环境监测解决方案增强型系列的一部分。ECOLOG即插即用是一种多功能&#xff0c;经济的系统&#xff0c;专为需要监测少于5…

转换流:代码与文件编码不一致读取乱码的问题

字符输入转换流&#xff1a;package com.gao;import java.io.*;public class transfer_stream {public static void main(String[] args) throws Exception {InputStream in new FileInputStream("E:\\黑马教育\\demo.txt");Reader re new InputStreamReader(in,&q…

Postman(07)Postman+OMySQL操作数据库

一、本文解决的问题 ● Postman断言需要查询数据存储情况&#xff1b; ● 部分业务需要从数据库中获取验证码&#xff08;例如登录&#xff09;&#xff1b; ● 自动化场景需要执行数据正确性比对。 二、OMySQL连接数据库 1、OMySQL安装与启动 1.1 安装node.js 这个百度一…

【windows】VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094

【问题描述】 打开需要启动的虚拟机后&#xff0c; 修改设备参数的时候&#xff0c;提示&#xff1a; VMware Workstation 不可恢复错误: (wmui) Exception 0xc0000094 has occurred。 【解决方法】 由于搭建的虚拟机环境一直在使用&#xff0c; 后来发现是VMware升级到17.0后…

【回眸】牛客网刷刷刷(三) Linux(续)软件工程(专题)

前言 近期的牛客网学习内容有Linux专题&#xff0c;以下记录一些笔试题中的Linux的知识点。 知识点 -u 用户号 指定用户的用户号&#xff1b;因为系统用户的用户号为 0&#xff0c;故指定用户号为 0&#xff1b; 如果同时有 -o 选项&#xff0c;则可以重复使用其他用户的标识…

马来酰亚胺-二硫键-活性酯;MAL-SS-NHS结构式

英 文 &#xff1a;MAL-SS-NHS 中文&#xff1a;马来酰亚胺-双硫键-活性酯 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取决于分子量 注意事项&#xff1a;取用…

【机器学习】逻辑回归(理论)

逻辑回归&#xff08;理论&#xff09; 目录一、概论1、何为逻辑回归2、映射函数的引入3、伯努利分布二、损失函数的推导三、用逻辑回归实现多分类1、间接法&#xff1a;HardMax2、直接法&#xff1a;SoftMaxⅠ SoftMax的引入Ⅱ SoftMax的计算Ⅲ 引入SoftMax后的损失函数&#…

声网许振明:RTC 场景 UHD 视频应用和探索

大家好&#xff0c;我是声网的视频工程师许振明&#xff0c;今天跟大家主要介绍一下声网在 RTC 场景 UHD 视频的应用和探索。主要基于声网 HFR 和 VDR 两个系统来展开分享。 随着 RTC 技术的发展和应用&#xff0c;越来越多的场景都需要接入 RTC 的能力。尤其是随着编码技术、…

【Linux】Ubuntu20.04.5安装ROS1【教程】

文章目录【Linux】Ubuntu20.04.5安装ROS1【教程】写在前面&#xff0c;一些特别注意的点安装步骤大纲1.选择软件镜像源&#xff08;可以省略&#xff0c;如果不成功再试这一步&#xff09;2.添加ROS软件源和密钥3.安装ROS14.设置环境变量5.安装rosinstall6.检查安装是否成功Ref…

基于uds和modbus协议的bootloader对比

2022年参与了两个bootloader项目的开发&#xff0c;两个项目使用的芯片、通讯驱动不同&#xff0c;因此传输协议也不同&#xff0c;年底了将两个项目做一个对比&#xff0c;也顺便加深下对bootloader的理解。相同点&#xff1a;modbusuds刷新流程刷新流程大同小异&#xff0c;简…