虚幻C++入门个人笔记(2)——标记宏、结构体枚举、资源加载、代理

虚幻C++学习(三) 就是代码编译时加载静态加载资源方法:ConstructorHelper::FObjectFinder(资源路径)//方法一//方法二使用加载的资源对象为蓝图变量赋值静态加载蓝图类方法:ConstructorHelpers::FClassFinder(蓝图路径)注意路径后要加一个_C,不然会报错就是游戏运行时加载。 阅读详情

标记宏

类UCLASS、成员属性UPROPERTY、成员函数UFUNCTION

蓝图和C++的交互

UObject

UE4对于C++进行调整后,靠拢了其他虚拟机语言,为了方便对象内存管理和映射数据操作,UE4对UECPP进行了更加严谨的语法定义,所有UE中使用的对象大部分继承自UObject,这样的系统级的管理更加轻松,不必涉及更多不定性内容,UObject具备如下优点

1.垃圾回收(new出来的对象不用去释放了)

2.引用更新(更新受限于GC回收机制,需要使用UPROPERTY宏标记)(苹果消亡,对象里指向它的指针指向为空)

3.序列化(场景中的Actor被保存时发生)(保存时保存到本地)

4.默认属性变化自动更新(对象在蓝图中暴露了属性,在C++中改了属性,蓝图中会自动修改,蓝图里改c++也会改)

5.源码调整了对象属性时,编译后会自动更新到资源实例上,前提场景实例没有修改过属性值,修改过后将使用场景中的修改内容做填充参考

6.自动属性初始化(不赋值指向默认值)

7.自动编辑器整合(可以将C++属性暴露到蓝图上)

8.运行时类型信息可用

9.运行时使用Cast可以进行类型信息投射检查(指针转换关系,尝试性地将一个指针转换为另一个指针,转换的过程是安全的,失败返回空成功返回真,两个类没有关系的时候就会失败)

10.网络复制

UCLASS宏

用于标记从UObject派生的类,使得UObject处理系统识别到它们

该宏为UObject提供一个对UCLASS的引用,描述是基于虚幻引擎的类型。对于标记UCLASS的类,引擎可进行识别

继承关系中的头文件描述

#include "MyObject.generated.h"

必须是最后一个被引入的头文件,默认由UE模板生成,此头文件需要了解其他类,所以需要放到最后

UCLASS()

UCLASS宏使虚幻引擎4能识别UMyObject

class MYPROJECT_API UMyObject:public UObject

如MyProject希望将UMyObject类公开到其他模板,则需要指定MYPROJECT_API

GENERATED_BODY()

GENERATED_BODY宏不获取参数,但会对类进行设置,以支持引擎要求的基础结构,GENERATED_BODY宏将成员访问等级设为“public”,而非设置“private”的缺省语言

创建UObject类对象指针

动态构建对象的时候使用到这个函数

NewObject()是最为简单的UObject工厂模式,他需要可选的外部对象和类,并会创建拥有自动生成的名称的新实例。

UCLASS宏标记

语法结构

UCLASS(描述指令,描述指令,...)

常用标记

BlueprintType

此类可以作为蓝图中的一种变量类型使用,类默认均可被蓝图访问,一般我们用此标记描述结构体,提供给蓝图访问

Blueprintable或NotBlueprintable

用来标明当前类是否可以被蓝图继承,默认可被继承,标记关系向子类传递,子类可覆盖描述关系

Abstract

Abstract类修饰符将类声明为“抽象基类”,这样会阻止用户在虚幻编辑器中向这个世界中添加这个类的Actor,或者在游戏过程中创建这个类的实例

Const

本类中的所有属性及函数均为常量,并应作为常量导出,该标记由子类继承

Config

将类内的成员变量数据信息保存到本地配置文件中,需要显式调用函数SaveConfig使用,并配合UPROPERTY宏操作

例:UCLASS(Config=Game)

ClassGroup

用来配置组件在添加时分组情况

例:UCLASS(ClassGroup=(ZQSELF))        //分组名字不要写中文

meta

额外操作宏

例:meta=(BlueprintSpawnableComponent)        //当前组件可以在蓝图中再被延展

UFUNCTION宏标记

用途:将成员函数暴露到蓝图中去,在蓝图中享有操作权限

语法结构(标注在函数顶端,禁止在尾端加分号)

UFUNCTION(指令,指令...,meta(key=value))

注意:在UFUNCTION修饰的函数中,如果参数类型是引用型参数,则在蓝图中将当作返回参数使用,无法查到输入阵脚。如果参数类型是const修饰的引用型参数,则参数被当作输入阵脚使用

常用标记

BlueprintCallable

表明此函数可在蓝图中被调用(当类被蓝图继承后才有效果)

注意:如果函数参数是引用类型,则在蓝图中调用被当作输入阵脚,如果从传入参数是const修饰的引用类型,则在蓝图中被当作输入针脚

例1:UFUNCTION(BlueprintCallable)

int32 CTime(const int32& num);

例2:UFUNCTION(BlueprintCallable)

int32 CTime(int32& num);        //被当作函数输出阵脚使用

Category

标明此函数在蓝图中的分类

用法Category="UE4TEST|MyActor"        //        |符号用来划分分类级别

BlueprintImplementableEvent

标记的函数只能在C++中调用,在蓝图中无法调用——在CPP中无需定义即可调用,调用的是蓝图中的一个节点

用此标记可以在C++中构建函数声明,但定义由蓝图完成,从而打到C++向蓝图进行调用的目的,在CPP中无需定义

UFUNCTION(BlueprintImplementableEvent,Category="UECPP|ACPPActory")

类似纯虚函数,但是继承关系中的蓝图并不用必须重写此函数

注意:

如果函数没有返回类型,则在蓝图中当作事件Event使用

如果函数存在返回类型,则在蓝图中当作函数使用(需要在函数的overlap中寻找)

如果带有参数

没有返回值,参数是基本数据类型,则当作普通事件输入参数使用

没有返回值,参数是基本数据类型引用,则当作函数看待,在蓝图函数重载表中寻找

没有返回值,参数是自定义数据类型(如FString),编译不过

没有返回式,参数是自定义数据类型引用,则当作普通函数看待,在蓝图函数重载表中寻找

如果有返回值,则当作函数使用

传递引用操作如BlueprintCallable

BlueprintNativeEvent

标记的函数只能在C++中调用,在蓝图中无法调用

此标记可以标注函数可以在蓝图中被重写,并且具备在C++中有另一个标记函数声明格式为:

函数名_Implementation(参数列表)        //必须要在C++中声明且定义

达到效果,如果蓝图重写此函数,则函数逻辑实现在蓝图,如果蓝图没有重写此函数,则函数实现在(函数名_Implementation)上

蓝图中实现后,可以右键函数节点,选择add call to parent function可以调用父类的函数逻辑(类似类中的虚函数,在继承关系中子类可以调用父类的虚函数)

注意:

如果函数没有返回类型,则在蓝图中当作事件Event使用

如果函数存在返回类型,则在蓝图中当作函数使用(需要在函数的overlap中寻找)

基本效果同上

传递引用操作如BlueprintCallable

BlueprintPure

特殊标记,构建一个蓝图中的纯函数,用来获取对象数据。所以此标记的函数必须有有效返回值(无返回值编译报错),并且在蓝图中无法加入到执行队列,只能以输出值的操作方式被使用,定义实现均放在CPP中

例:UFUNCTION(BlueprintCallable,BlueprintPure)

UPROPERTY宏标记

语法结构

注意:用于将对象属性暴露到蓝图中操作,整型中只有int32能暴露到蓝图中

UPROPERTY(标记,标记,...,meta(key=value,key=value,...))

类型 参数名称

注意:就算没有标记,该加UPROPERTY的地方也要加,否则没有智能指针的操作特性,例如UClass* ActorClass        //用来拾取类资产

常用标记

BlueprintReadOnly

标记属性可以在蓝图中获取,但是只能读取无法操作

BlueprintReadWrite

在蓝图中即可读取也可以操作设置

Category

标明此变量在蓝图中的分类

用法Category="UE4Test|MyActor"        //

IEEE ACCESS Please note that all author names should be listed in English.(所有作者名需用英文名列出) 很奇怪哈,我明明手稿和提交页面作者都是用的英文,但是为什么还是会提示我没用英文呢?后来给编辑发消息,回的很快,他给我发了一个截图,确实是出现中文,但是我还是不知道为啥会出现中文。直到晚上回寝室洗澡的时候忽然想起来了是不是orcid的原因,因为它会强制作者绑定一个orcid账号,而我的orcid账号的名字刚好是中文的。当然这个只是我的一个猜想,但是我觉得可能性很大。我的第二篇论文已经投稿了快三个月了,效果非常的不好,所以我打算转投IEEE ACCESS了,希望这里可以给我一点好的建议。 阅读详情

相关推荐

Llama模型结构拆解:为什么MLP模块要这样设计?从参数配置到计算流程全解析

本文深入解析了Llama模型MLP模块的设计精髓。通过拆解其三线性层结构、门控机制与SwiGLU激活函数,揭示了并行计算如何提升效率,并详细阐述了intermediate_size参数配置背后的经验权衡与计算考量,帮助读者透彻理解这一核心组件的设计逻辑与工程实现。

mac99的博客 524

SAP PS模块实战指南:从项目启动到结算的全流程解析

本文详细解析SAP PS模块在项目管理中的全流程应用,从项目启动到结算的关键操作与实战技巧。通过WBS设计、预算控制和资源调配等核心功能,帮助管理者高效协调项目进度与成本,特别适用于交付型和成本型项目管理。掌握PS模块能显著提升项目管理效率与精准度。

weixin_42553471的博客 445

【深度学习基础】Temporal Fusion Transformer

从下向上看:全连接(Dense) → ELU(指数线性激活函数(比relu好点,有利于模型收敛)) → 全连接(Dense) → 门控线性单元(Gate)(Gated Linear Units (GLUs)) → Layernorm。:一方面,它可以进行静态上下文变量和动态变量的融合,另一方面,通过门控进行了特征选择操作,门控体现在GLU(门控线性单元)中,用了sigmoid控制信息的通过程度,具有良好的适应性,能够自动选择有效信息,自适应地调整网络复杂性。输入:主输入,可选的上下文向量c。

weixin_41838721的博客 1216

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

PVT(Process Voltage Temperature)

芯片PVT

网始如芯个人博客 3万+

RLC电阻电容电感基础知识——电感篇

电感 等效电路 电感线圈由铜导线绕制,等效电路如图所示。 寄生电阻RS,包括了绕线电阻、引脚串联电阻以及磁芯损耗电阻三部分组成,其中绕线电阻与线径、长度、铜线电阻率有关;引脚电阻与引线长短、粗细有关;磁芯损耗电阻与磁芯材料特性有关,显然磁芯损耗电阻还与工作频率有关.寄生电容C主要是绕线圈与圈之间的杂散电容(为PF级),与绕线工艺有关。 等效导纳 显然: (1)当角频率ω(频率f)较小时,呈电感性. (2)当角频率ω等于ω0时,导纳Y虚部为0,呈现电阻性,即发生共振。令导纳Y虚部为0,即可求出共振角频率ω

azj2019的博客 1万+

File Load Error for Untitled.ipynb Unhandled error 解决方案

本文主要介绍了File Load Error for Untitled.ipynb Unhandled error 解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

ADES1831和ADBMS6830

1、上电默认进入STANDBY模式,SPI发送0xFF也可以进入STANDBY模式2、看门狗定时器超时后,进入SLEEP状态3、配置寄存器中的REFON位使用WRCFGA命令将组A设置为1进入REFUP状态,此状态比待机状态更快地启动ADC转换。i<TOTAL_IC;i++)注意:读AFE数据时会随着AFE片数增加而增加,原因是唤醒时间和AFE片数密切相关,如果需要缩短时间,那么减少唤醒频次。

m0_61973119的博客 255

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 虚幻C++入门个人笔记(1)——一些基础、UE_LOG、TArray、翻译转换
下一篇: 案例中需注意的地方.个人笔记
hoppingg
博客等级 码龄5年 79粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值