UC++中的头文件和宏的那些事儿

        假定有如下继承自AActor类的.h文件:

#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MoveRandom.generated.h"UCLASS()
class DEMO01_API AMoveRandom : public AActor
{GENERATED_BODY()public:	AMoveRandom();protected:virtual void BeginPlay() override;public:	virtual void Tick(float DeltaTime) override;private:FVector initLocation;FVector targetLocation;FVector GetRandomLocation();UStaticMeshComponent* staticMeshComponent;UStaticMesh* staticMesh;UMaterial* material;
};

1)#include "CoreMinimal.h"

        CorMinimal.h来自于“Engine/Source/Runtime/Core/Public/CoreMinimal.h”,里面包含了大量常用的基础类,包括:字符串String(如:FString、FName)、数学Math(如:FVector、FColor)、容器Container(如:TSet、TArray)、日志Logging、代理Delegates等等。可以说没有这个库,几乎寸步难行。大多数情况下就是闭着眼睛继承就好了。

2)#include "GameFramework/Actor.h"

        Actor.h来自于“Engine/Source/Runtime/Engine/GameFramework/Actor.h”,由于是基于AActor类生成的源代码,所以自然包含AActor的头文件。其实通过查看UE的API会发现,AActor的属性和方法嗷嗷多(是滴,你没看错,多得配得上“嗷嗷”这个形容词),UE自身继承自AActor的类有360多个(只能汗一个),对于UE日常编程来说,继承AActor类的情况是比较多的。有些开发者甚至说场景蓝图(Level Blueprint)里面不要添加内容,其相关的功能都可以用继承自AActor的类来搞定,因为这样方便功能在各个Level中重复使用,嗯,不得不说,似乎有点儿道理。

3)#include "MoveRandom.generated.h"

        这个是专门为MoveRandom这个类生成的文件(感觉VIP待遇,有木有?),其后面的“.generated.h”这个内容是不变的,前面的“MoveRandom”内容保持和所建立的类名相同。对应的.cpp文件是“MoveRandom.gen.cpp”,不是“MoveRandom.generated.cpp”,呵呵。所在目录是“Intermediate\Build\Win64\UnrealEditor\Inc\Demo01\UHT”,其中“Demo01”是工程名,文件里面具体内容我看了头大,知道虚幻所生成的所有“反射数据”都会放入到该文件当中就好了。

特别提醒:#include“xxxxxx.generated.h"必须在所有#include宏语句最下部,否则报错

特别提醒:#include“xxxxxx.generated.h"必须在所有#include宏语句最下部,否则报错

特别提醒:#include“xxxxxx.generated.h"必须在所有#include宏语句最下部,否则报错

        重要的事情说三遍,至于具体原因,我想是因为xxxxxx.generated.h的内容会用到所有上面被include的文件内容吧。

补充一下关于反射的内容:

        反射是指在运行状态下,任意一个实体类都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为语言的反射。

        C++本身并不支持反射,虚幻在C++上搭建了自己的一套反射机制。虚幻使用反射可以实现多种功能,包括:序列化Serialization、Editor中的细节面板、GC垃圾回收、网络复制、蓝图/C++ 通信和相互调用等等。

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

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

相关文章

车联网架构设计(一)_消息平台的搭建

车联网是物联网的一个主要应用方向,车辆通过连接车联网平台,实时进行消息的交互,平台可以提供车辆远程控制,故障检测,车路协同等各方面的功能。 我在车联网行业从事了很长时间的技术工作,参与了整个车联网…

树莓派多串口通信

树莓派多串口通信 串口配置串口通信函数分析串口通信示例代码 参考博文1:树莓派 4 UART 多串口配置通信参考博文2:树莓派wiringPi库详解关于树莓派相关其他环境配置可参考:快速上手树莓派关于wiringPi库初始化与IO口开发可参考:树…

深入探索FastAPI单元测试:使用TestClient轻松测试你的API

原文:深入探索FastAPI单元测试:使用TestClient轻松测试你的API-51CTO.COM 当使用FastAPI进行单元测试时,一个重要的工具是TestClient类。TestClient类允许我们模拟对FastAPI应用程序的HTTP请求,并测试应用程序的响应。这使我们能…

调优--学习笔记

1,Presto调优 数据存储格式 1)合理设置分区 与Hive类似,Presto会根据元信息读取分区数据,合理的分区能减少Presto数据读取量,提升查询性能。 2)使用列式存储 Presto对ORC文件读取做了特定优化&#xff0c…

Qt OpenCV 学习(一):环境搭建

对应版本 Qt 5.15.2OpenCV 3.4.9MinGW 8.1.0 32-bit 1. OpenCV 下载 确保安装 Qt 时勾选了 MinGW 编译器 本文使用 MinGW 编译好的 OpenCV 库,无需自行编译 确保下载的 MinGW 和上述安装 Qt 时勾选的 MinGW 编译器位数一致,此处均为 x86/32-bit下载地址…

《微信小程序开发从入门到实战》学习四十

4.2 云开发JSON数据库 4.2.11 更新数据 使用数据库API更新数据有两种方法:一.将记录局部更新的update方法;二.以替换的方式更新记录的set方法 update方法可以局部更新一个记录或一个集合的多个记录,更新时只有指定字段更新,其他…

电脑连不上wifi,适配器Intel(R)WiFi6 AX201 160MHz遇到与驱动程序或硬件相关问题,连不上wifi,电脑WiFi图标没了

电脑WiFi图标没了,电脑连不上wifi 适配器IntelWiFi6 AX201 160MHz遇到与驱动程序或硬件相关问题应该怎么解决? 方法一:电脑冷重启即可 就是长按那个开机键,然后滑动关机,,,重启(我…

智能诊疗体验:整合AI技术的互联网医院小程序开发

在科技化的趋势下,互联网医院小程序的开发变得愈发重要,尤其是通过整合人工智能(AI)技术,进一步提升了就医的效率。 一、引言 互联网医院小程序其开发目标是提高医疗服务的效率,同时也也提升了用户的就医…

Clickhouse在货品标签场景的应用

背景 在电商场景中,我们经常需要对货品进行打标签的操作,简单来说就是对货品进行各种分类,按照价格段进行分组,此时运营人员就可以通过价格段捞取到满足条件的商品了,本文就来简单看下这个场景如何在clickhouse中实现…

23种设计模式之C++实践(一)

23种设计模式之C++实践 1. 简介2. 基础知识3. 设计模式(一)创建型模式1. 单例模式——确保对象的唯一性1.2 饿汉式单例模式1.3 懒汉式单例模式比较IoDH单例模式总结2. 简单工厂模式——集中式工厂的实现简单工厂模式总结3. 工厂方法模式——多态工厂的实现工厂方法模式总结4.…

【像素画板】游戏地图编辑器-uniapp项目开发流程详解

嘿,用过像素画板没有哦,相信喜欢绘画的小朋友会对它感兴趣呢,用来绘制像素画非常好看,有没有发现,它是可以用来绘制游戏地图的,是不是很好奇,来一起看看吧。 像素画板,也叫像素画的绘…

c语言-归并排序

目录 1、归并排序基本思想 2、归并排序的实现(递归法) 2.1 代码实现递归法归并排序 3、归并排序的实现(非递归法) 3.1 修正边界问题 3.2 代码实现非递归法归并排序 结语: 前言: 归并排序是一种把数…

Python---格式化输出与%百分号----涉及转义符 \ 反斜杠的使用

相关链接Python--格式化输出中的转义符号----\t 制表符(空格的)和\n(换行的)_唯元素的博客-CSDN博客 Python---字符串(用单、双引号、 三单/双引号定义。反斜杠 \ 转义,单在双内/双在单内 )-CS…

力扣 --- 最后一个单词的长度

题目描述: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World&…

运维02:Linux

Linux安装 VMWare安装:夸克网盘分享(提取码:refg) CentOS安装:Index of /centos/7.9.2009/isos/x86_64/ Xshell安装:百度网盘 请输入提取码(提取码:juau) 环境准备 1、…

在Windows 11中,把iPhone照片和视频导出来又快又简单,无需第三方软件

如果你想将照片和视频从iPhone传输到Windows 11 PC,最快、最简单的方法是插入手机并执行自动导入。以下是操作方法。 如何将照片和视频从iPhone导入Windows 如果你用USB数据线将iPhone插入Windows PC,Windows 11可以像标准数码相机一样连接到它&#x…

react之封装有无Token(路由权限控制)的高阶组件

TOC 前景 有些路由页面内的内容信息比较敏感,如果用户没有经过登录获取到有效Token,是没有权限跳转的,根据Token的有 无控制当前路由是否可以跳转就是路由的权限控制 技术方案 实现步骤 1.在 components 目录中,创建 AuthRoute/in…

solidity实现ERC721代币标准发布NFT

文章目录 1、非同质化货币(NFT)- 维基百科2、IERC1653、IERC7214、IERC721Receiver5、IERC721Metadata6、ERC7217、ERC721 NFT 的实现8、编译部署 1、非同质化货币(NFT)- 维基百科 非同质化代币(英语:Non-F…

Elasticsearch:什么是大语言模型(LLM)?

大语言模型定义 大语言模型 (LLM) 是一种深度学习算法,可以执行各种自然语言处理 (natural language processing - NLP) 任务。 大型语言模型使用 Transformer 模型,并使用大量数据集进行训练 —— 因此规模很大。 这使他们能够识别、翻译、预测或生成文…

时间复杂度为O (nlogn)的排序算法

归并排序 归并排序遵循分治的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解,归并排序的步骤如下: 划分:分解待排序的 n 个元素的…