【UE5 C++课程系列笔记】02——创建C++类的三种方式

news2024/11/8 3:09:31

目录

一、从UE编辑器中创建

引用头文件报错的两种解决方式

(1)方式1

(2)方式2

二、在文件夹中直接创建

三、在Visual Studio中创建


一、从UE编辑器中创建

在UE编辑器中选择“Tools-》New C++ Class”

这里新建的类的父类选择“Object”

存放路径放在项目路径下的一个名为“BaseType”的文件夹中

引用头文件报错的两种解决方式

创建类后,在VS中重新Build一下项目,可以看到此时cpp文件中报错如下

为了解决这个问题我们有两种解决方式:

(1)方式1

我们可以直接删除前面的“BaseType/”

(2)方式2

打开“xxx.Build.cs”

添加如下代码,表示公开包含的路径

PublicIncludePaths.AddRange(
	new string[] { 
		"xxx"
	}
);

重新Build项目。

然后选中“xxx.uproject”,右键选择“Generate Visual Studio project file”

在VS中点击“Reload All”

此时可以看到导入头文件的报错消失了

二、在文件夹中直接创建

在项目中直接创建文本文件,然后更改名称和文件后缀名

 然后选中“xxx.uproject”,右键选择“Generate Visual Studio project file”

此时在VS中就可以看到创建的文件。

打开头文件“XGBaseObject1.h”,添加如下代码。代码的意思为定义一个名为UXGBaseObject1UObject类的头文件代码。这个类是所有虚幻引擎对象的基类,通过继承UObjectUXGBaseObject1可以利用虚幻引擎的反射系统、垃圾回收机制以及其他面向对象的特性。

#pragma once

#include "CoreMinimal.h"
#include "XGBaseObject1.generated.h"

UCLASS()
class STUDY_API UXGBaseObject1 : public UObject
{
	GENERATED_BODY()
};
  • #pragma once
    • 预处理器指令,确保该头文件在一个编译单元中只被包含一次,避免重复定义错误。
  • #include "CoreMinimal.h"
    • 包含虚幻引擎的核心最小定义头文件,其中包含了许多基本类型、宏定义和常用的函数声明等,是构建虚幻引擎相关类的基础。
  • #include "XGBaseObject1.generated.h"
    • 由虚幻引擎的代码生成工具(Unreal Header Tool,UHT)使用的头文件。它包含了与类的反射系统相关的代码生成内容,用于支持虚幻引擎的反射特性,如运行时类型信息、序列化等。
  • UCLASS()宏:
    • 虚幻引擎反射系统中的关键宏,用于标记UXGBaseObject1类,使得引擎能够在运行时获取关于这个类的各种信息,例如类名、属性、函数等。
  • class STUDY_API UXGBaseObject1 : public UObject
    • 定义了UXGBaseObject1类,它继承自UObject类。
  • GENERATED_BODY()宏:
    • 这是由 UHT 要求的宏,用于标记类中需要由代码生成工具生成代码的部分,通常放在类定义的主体中,以确保反射相关的代码被正确生成

 

打开源文件,添加如下代码

#include "XGBaseObject1.h"

表示该源文件(.cpp文件)需要使用在头文件(.h文件)中定义的类、函数、变量等。

最后重新Build。

三、在Visual Studio中创建

鼠标右键点击“Add-》Unreal Engine Class” 

这里选择“Actor Class”

修改一下类名,设置保存路径在项目中的“BaseType”文件夹中,然后点击“OK”

点击“Reload”

此时就创建了“XGBaseActor”类的头文件和源文件

在头文件中,代码的大致意思为“XGBaseActor”类继承自AActor,包含了默认的构造函数、BeginPlay(游戏开始或生成时调用)和Tick(每帧调用)函数的声明。

在源文件中,包含了类的构造函数、BeginPlay函数和Tick函数的实现。其中,Super::BeginPlay(),确保了父类(AActor)的BeginPlay函数中的操作被执行,在实际应用中,可以在这之后添加额外的类实例化操作。

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

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

相关文章

Gitlab 中几种不同的认证机制(Access Tokens,SSH Keys,Deploy Tokens,Deploy Keys)

前言 公司主要使用 Go 语言做项目,有一些 Gitlab 私有仓库需要引用,在做 CI 时,要自行配置权限以获取代码。 最近发现各个项目组在做 CI 遇到仓库权限问题时的解决方式不尽相同,有用 Project Token 的,有用 Deploy K…

【python】OpenCV—Augmented Reality Using Aruco Markers

文章目录 1、任务描述2、Aruco Markers3、代码实现4、更多例子展示5、涉及到的库cv2.findHomography 6、参考 1、任务描述 借助 Aruco Markers,替换墙面上画面中的内容 2、Aruco Markers OpenCV 中的 aruco 模块共有 25 个预定义的标记字典。字典中的所有标记包含…

新代机床采集数据

新代集團1995年成立於台灣新竹,事業版圖遍布全球,以台灣為中心向外發展,據點橫跨歐洲、美洲、亞洲三大洲。新代長期深耕於機床控制器的軟體及硬體技術研發,專注於運動控制領域,目前已成為亞太市場中深具影響力的控制器領導品牌之一。主營產品包括:機床數控系統、伺服驅動…

Java虚拟机 - 高级篇

一、GraalVM 1. 什么是GraalVM 2. GraalVM的两种运行模式 (1)JIT即时编译模式 (2)AOT提前编译模式 3. 应用场景 4. 参数优化和故障诊断 二、新一代的GC 1. 垃圾回收器的技术演进 2. Shenandoah GC 测试代码: /** C…

Ubuntu 20.04/22.04无法连接网络(网络图标丢失、找不到网卡)的解决方案

问题复述: Ubuntu 20.04无法连接到网络,网络连接图标丢失,网络设置中无网络设置选项。 解决方案 对于Ubuntu 20.04而言:逐条执行 sudo service network-manager stopsudo rm /var/lib/NetworkManager/NetworkManager.statesudo…

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录 一、模型匹配 1、什么是模型匹配 2、步骤 1)提取模型的特征 2)在图像中查找特征点 3)进行特征匹配 4)模型匹配 3、参数及用法 1、用法 2、参数 1)image:待搜索对象 2)templ&am…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(四)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

科技之光,照亮未来之路“2024南京国际人工智能展会”

全球科技产业的版图正以前所未有的速度重构,而位于中国东部沿海经济带的江浙沪地区,作为科技创新与产业升级的高地,始终站在这一浪潮的最前沿。2024年,这一区域的科技盛宴——“2024南京人工智能展会”即将在南京国际博览中心盛大…

基础的八股

JS this 全局:this指向window 函数:this指向window 对象:this指向调用它的 get、post的区别 1、写的地方不同:get在地址栏里 地址栏有多长就只能写多少、post在请求体里 没有上限 2、关于回退和刷新:get回退和刷新没问…

TCP、UDP、HTTPS、HTTP

前言 OSI七层网络 名称解释协议应用层定义了各种应用协议的数据规范 HTTP、HTTPS、SSL FTP、DNS TFTP、SMTP 表示层不同系统之间通信会话层断点续传传输层 一个电脑有许多端口,根据端口找到发送方与接收方 确保数据包完整性 TCP、UDP网络层 ARP协议:通过…

shopify主题布局layout

一、基本概念 Layout是Shopify主题中的基础结构,它决定了页面的整体框架和布局方式。通过Layout,可以统一管理和控制页面上的公共元素,如页眉(Header)、页脚(Footer)等,确保这些元素…

闯关leetcode——20. Valid Parentheses

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/valid-parentheses/description/ 内容 Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. An input st…

批量采集电商商品详情数据接口(上货and数据分析价格库存监控等)

——在成长的路上,我们都是同行者。这篇关于电商API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 批量采集电商商品详情数据涉及到多个方面,包括商品的上货、价格监控、库存监…

机器学习--神经网络

神经网络 计算 神经网络非常简单,举个例子就理解了(最后一层的那个写错了,应该是 a 1 ( 3 ) a^{(3)}_1 a1(3)​): n o t a t i o n notation notation: a j ( i ) a^{(i)}_j aj(i)​ 表示第 i i i 层的…

SprinBoot+Vue财务管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强…

百度地图SDK Android版开发 11 覆盖物示例 4 线

百度地图SDK Android版开发 11 覆盖物示例 4 线 前言界面布局MapPolyline类常量成员变量初始值创建覆盖物移除覆盖物设置属性加载地图和释放地图 MapPolylineActivity类控件响应事件 运行效果图 前言 文本通过创建多个不同线宽的折线和大地曲线,介绍Polyline的使用…

numpy中的比较运算

目录 比较运算符 比较运算符 有两种情况会普遍使用比较运算符,一个是从数组中查询满足条件的元素,另一个是根据判断的结果执行不同的操作。 示例入下: import numpy as np arr7 np.array([[1,2,10],[10,8,3],[7,6,5]]) arr8 np.array([[2,…

整流器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

整流器制造行业作为制造业的重要组成部分,也在积极探索数字化转型的新路径。整流器,作为电力电子领域的关键元件,广泛应用于通信、工业控制、新能源等多个领域,其制造过程的智能化升级不仅关乎产品性能的提升,更是推动…

opencv使用videocapture打开视频时,依赖opencv_ffmpeg***.dll,默认必须放到执行目录,自定义目录需要重新编译opencv库

1. 找到modules下opencv_highgui模块的cap_ffmpeg.cpp 2. 找到加载opencv_ffmpeg的接口, 修改接口内opencv_ffmpeg的路径即可.