UE4-反射和垃圾回收、将c++类成员显示到蓝图

5 篇文章 0 订阅

一、反射系统相关:

C++中并没有内置的反射系统,UE4有专属的反射系统负责采集数据。该系统负责合并C++数据与UE4系统数据,并在蓝图中显示。同时也负责垃圾回收。

垃圾回收相关:

与项目相关的程序管理器内存会自动删除无需再使用到的对象,这样便释放了内存。在UE4中的垃圾回收系统中 追踪着变量引用给定对象的数量,只要对象不再被变量引用,对象就会被删除。

类、变量、函数参与垃圾回收相关:

1.类参与UE4的垃圾回收系统,需要使用特定宏指令标记(宏指令是被赋予名称的特定代码片段)

解释:UE4中的UHT(虚幻头工具)是在项目编译时收集带有特定宏指令类信息的程序,当识别到特定宏指令时,会为类生成额外代码(可理解成 生成的额外代码将宏指令替换),反射系统就会工作,收集此类中的信息。

2.UCLASS宏指令位于所有类修饰的顶部,使用此宏指令来标记类就会被Garbage Collection系统回收垃圾。

3.变量必须使用UPROPERTY宏指令标记,才能参与反射系统。

4.函数必须用UFUNCTION宏指令标记,才能参与反射系统。

5.重点:需要将include写到文件顶部,名称为 .generated.h文件的类,

.generated.h文件的类包含了所有从类中为反射系统收集数据相关的代码。有了它可以进行反射和采集数据,可以命令垃圾回收,并将变量和函数反射至虚幻编辑器。

注意:只是反射至虚幻编辑器,并不能直接在蓝图中访问,需要进行额外的参数设置。

二、将类成员显示到蓝图:

注意:c++类的创建此文章中的示例是基于object类型为父类。如果是基于Actor为父类创建的类,在宏指令中的无需加入关键词就能被反射,因为在Actor中已经继承了反射所需要的属性。

1.创建基于此类的蓝图类。

注意:如果类名上方的宏指令的括号内没有关键词,在UE场景中创建基于此类的蓝图类是灰色的。所以想让类中的成员显示到蓝图,需要在宏指令的括号中加入关键词,关键词不能输入错误,否则无法识别。

UCLASS(Blueprintable)

保存后,在vs界面选择生成,完成编译。回到UE4,创建基于类的蓝图类,重命名为MyObject_BP并选择路径生成。

2.在c++类中声明的变量及函数在上方的宏指令中加入关键词,并在.cpp中进行变量和函数定义。完成后vs中生成,编译完成后到MyObject_BP蓝图中进行访问

变量:UPROPERTY(BlueprintReadWrite)

注意:想使用BlueprintReadWrite,就必须放在public下面。

函数:UFUNCTION(BlueprintCallable)

 

 3.在MyObject_BP访问变量及函数

 

补充扩展:对变量及函数在蓝图中进行分类。在宏指令括号内,输入第二个分类参数并起名称,在蓝图中就会将变量和函数放置在对应的分类下。关键词决定了反射系统如何在蓝图中显示变量和函数。

变量:UPROPERTY(BlueprintReadWrite,Category="MyVariables")

函数:UFUNCTION(BlueprintCallable,Category="MyFunctions")

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值