UE5笔记:虚幻引擎反射系统和对象
虚幻引擎反射系统
使用宏提供引擎和编辑器各种功能,封装你的类。使用虚幻时,可以使用标准的C++类,函数和变量
虚幻中对象的基类是UObject,UCALSS宏的作用是标记UObject的子类,以便UObject处理系统可以识别他们
UObject创建
1.不支持构造器参数。所有的C++ UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。
2.构造器应该轻量化,仅用于设置默认的数值和子对象,构造时不应该调用其它功能和函数。对于 Actor和Actor组件,初始化功能应该输入 BeginPlay() 方法。
3.永远都不应使用 new 运算符。所有的 UObjects 都由虚幻引擎管理内存和垃圾回收。如果通过 new 或者 delete 手动管理内存,可能会导致内存出错
UObjects提供的功能
垃圾回收 引用更新 反射 序列化默认属性变化自动更新 自动属性初始化 自动编辑器整合 运行时类型信息可用 网络复制
头文件格式
UObject 在源(.cpp)文件中的实现与其他 C++ 类相似,其在头(.h)文件中的定义必须遵守特定的基础结构,以便在虚幻引擎 4 中正常使用。
使用编辑器的"New C++ Class"命令是设置格式正确头文件的最简单方法。
UObject 派生类的基础头文件可能看起来与此相似,假定 UObject 派生物被称为 UMyObject,其创建时所在的项目被称为 MyProject:
pragma once
include 'Object.h'
include 'MyObject.generated.h'
UCLASS() //使引擎能识别UMyObject
class MYPROJECT_API UMyObject : public UObject //如果UMyObject类公开到其他模块,则需指定MYPROJECT_API
{
GENERATED_BODY()
//此宏不获取参数,但会对类进行设置,以支持引擎要求的基础结构。所有UCLASS和USTRUCT都有此要求
}
Ticking 代表虚幻引擎中对象的更新方式。所有Actors均可在每帧被 tick,便于您执行必要的更新计算或操作。
Actor 和 Actor组件在注册时会自动调用它们的 Tick 函数,然而,UObjects 不具有嵌入的更新能力。在必须的时候,可以使用 inherits 类说明符从 FTickableGameObject 继承即可添加此能力。
这样即可实现 Tick() 函数,引擎每帧都将调用此函数。
销毁对象
对象不被引用后,垃圾回收系统将自动进行对象销毁。
这意味着没有任何 UPROPERTY 指针、引擎容器、TStrongObjectPtr 或类实例会拥有任何对它的强引用。
弱指针
不会组织对象的销毁 如果引用对象被销毁,则弱指针也将自动清空。弱指针的操作意图是保存一个到达目标对象的指针,但不会控制该对象的生命周期。
UE5笔记:虚幻引擎反射系统和对象的更多相关文章
- 使用虚幻引擎中的C++导论(三-反射系统与迭代器)
使用虚幻引擎中的C++导论(三) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...
- 使用虚幻引擎中的C++导论(四-内存管理与垃圾回收)(终)
使用虚幻引擎中的C++导论(四)(终) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如 ...
- 使用虚幻引擎中的C++导论(一-生成C++类)
使用虚幻引擎中的C++导论(一) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...
- 使用虚幻引擎中的C++导论(二-UE4基类)
使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...
- 虚幻引擎4设置Visual Studio
转自:http://www.unrealchina.net/portal.php?mod=view&aid=149 设置Visual Studio和虚幻引擎4协同工作有利于提高开发人员使用UE ...
- 虚幻引擎中的数组---TArray: Arrays
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/45367171 作者:ca ...
- ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置
ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置 操作系统:Ubuntu 18.04 虚幻引擎:4.26.2 目录 ROSIn ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- Unreal Engine 虚幻引擎宣布对开发者免费
虚幻引擎4现在可供每个人免费使用,而且所有未来的更新都将免费!您可以下载引擎并将其用于游戏开发的各个方面,包括教育.建筑以及可视化,甚至虚拟现 实.电影和动画. 当您发布游戏或应用时,在您的每个游戏在 ...
- WCF 笔记 (2) - 传输泛型 List 对象
WCF 笔记 (2) - 传输泛型 List 对象 本帖介绍怎么在 WCF 中,在 Server-side 和 Client-side 之间,传递默认无法传输的 List<T>.List& ...
随机推荐
- 瑞芯微 | 摄像头ov13850移植笔记
<1.瑞芯微rk356x板子快速上手> <2.Linux驱动|瑞芯微rtc-hym8563移植笔记> <3.Linux驱动 | Linux内核 RTC时间架构-基于瑞芯微 ...
- String, StringBuffer 和 StringBuilder之间的区别
String, StringBuffer 和 StringBuilder 可变性 String不可变 StringBuffer 和 StringBuilder 可变 线程安全 String 不可变,因 ...
- Vue使用v-for 循环生成tabs 标签页
实现最终效果: template代码: activeName:默认第一个显示的tab <el-tabs v-model="activeName" type="car ...
- git 修改提交作者及提交日期
进入交互式 rebase 模式 git rebase -i <commit> 你要修改哪次提交的日期,就 rebase 到该提交的上一次提交. git 提示你新的分支要包含哪些提交,默认已 ...
- 如何选择 Linux 发行版
简介 要建立云服务器,首先需要安装操作系统.在现代环境中,几乎所有情况下都是指 Linux 操作系统.从历史上看,Windows 服务器和其他类型的 Unix 在特定的商业环境中都很流行,但现在几乎每 ...
- web静态和动态的区别
一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在 ...
- windows docker(25.0.3) 运行 1.4.1 nacos 容器
Docker Desktop 设定图标 -> Docker Engine 设定国内镜像源 添加配置: { "builder": { "gc": { &qu ...
- 【论文解读】Faster sorting algorithm
一.简要介绍 基本的算法,如排序或哈希,在任何一天都被使用数万亿次.随着对计算需求的增长,这些算法的性能变得至关重要.尽管在过去的2年中已经取得了显著的进展,但进一步改进这些现有的算法路线的有 ...
- Angular 18+ 高级教程 – Component 组件 の Query Elements
前言 Angular 是 MVVM 框架. MVVM 的宗旨是 "不要直接操作 DOM". 在 Component 组件 の Template Binding Syntax 文章中 ...
- Azure – DNS
前言 以往 DNS 都是用 Domain 公司免费提供的. 但这类 DNS 一般都不支持 API 访问. 这就会导致无法自动 renew Let's Encrypt wildcard SSL. 所以用 ...