UE_C++ —— UE反射系统111
Unreal Engine Reflection System是通过各种宏来封装类以提供引擎和编辑器功能当使用UE编程时可使用标准的C类、函数和变量UE中对象的基类是UObject每个类都定义了一个模板用于新Actor或对象可使用UCLASS宏来标记从UObject派生的类以便UObject handling system识别它们TSubclassOf是一个提供类型安全的UClass模板类从特定类型派生的类非常有用如可将变量公开给蓝图设计者可赋加特定武器类为玩家角色指定生成类可包含structsstructs是可帮助组织和操控其相关成员属性的数据结构可使用USTRUCT()宏来单独定义Unreal Smart Pointer Library是C11智能指针的自定义实现旨在减轻内存分配和追踪的负担包含行业标准的 Shared Pointers、Weak Pointers、Unique Pointers、Shared References非空共享指针Interfaces提供可以在多个或不同的类中实现函数和额外的游戏行为玩家角色可以与世界中的各种Actor互动每个互动都能引起对一个事件的不同反应Metadata Specifiers控制classes、interfaces、structs、enums、functions或properties与引擎和编辑器各方面的交互方式每一种类型的数据结构或成员都有自己的元数据说明符列表UFUNCTION、UPROPERTY宏使UE能注意到新的类、函数和变量这些宏由引擎进行垃圾回收在指定宏时可在UE内编辑和显示它们一ObjectsUObject是引擎对象的基类UCLASS宏用于标记UObject及其子类以便UObject handling system识别// UObject 派生类的基础头文件使用编辑器的New C Class命令是设置格式正确头文件的最简单方法 #pragma once #include Object.h #include MyObject.generated.h UCLASS() //使引擎能识别 UMyObject支持大量参数类说明符 class MYPROJECT_API UMyObject : public UObject //将UMyObject类公开到其他模块则需要指定 MYPROJECT_API { GENERATED_BODY() //此宏不获取参数但会对类进行设置以支持引擎要求的基础结构所有UCLASS和USTRUCT均有此要求 };UCLASS宏为 UObject 提供了一个用于描述引擎类型的 UCLASS 引用每个 UCLASS 都保留一个CDOClass Default Object的对象CDO 本质上是一个默认模板对象由类构造函数生成之后就不再修改可根据对象实例获取其 UCLASS 和 CDO通常它们都是只读类型使用GetClass()函数即可随时访问对象实例的 UCLASS UCLASS 包含定义类的properties和functions是标准C代码可用的普通C变量和函数但被引擎特定的元数据所标记控制在对象系统中的行为注UObject 类还可包括仅限本地的属性没有用 UFUNCTION 或者 UPROPERTY 标记用于反射仅被标识符宏标记的函数和属性会被列举在对应的 UCLASS 中UObjects 可有任意类型的成员变量properties或函数为便于引擎识别和操纵这些变量和函数需以特殊的宏来标记并符合一定类型的标准UObject 创建UObjects 不支持构造器参数所有的C UObject都会在引擎启动的时候初始化引擎会调用其默认构造器如没有默认的构造器UObject 将不会编译UObject 构造器应该轻量化仅用于设置默认值和子对象构造时不应该调用其它功能对于Actor和Actor组件初始化功能应放在BeginPlay()中NewObject // UObjects 仅应在运行时使用 NewObject 构建 CreateDefaultSubobject // 在构造函数中使用应仅处理本地数据或加载静态资源注UObjects永远不要使用new操作符所有的UObjects都应由引擎管理内存和垃圾回收UObject 提供的功能此系统的使用不强制要求甚至有时不适合使用但却存在以下益处垃圾回收引用更新反射序列化默认属性变化自动更新自动属性初始化自动编辑器整合运行时类型信息可用网络复制注大部分适用于 UStructs有与UObject 一样的反射和序列化能力UStruct 被当作数值类型处理并且不会垃圾回收UObject 更新Ticking 代表虚幻引擎中对象的更新方式所有Actors均可在每帧被 tick便于执行必要的更新计算或操作Actor 和 Actor组件在注册时会自动调用它们的 Tick 函数然而UObjects不具有内建的更新能力在必须的时候可以使用 inherits 类说明符从FTickableGameObject继承即可添加此能力 这样即可实现Tick()函数引擎每帧都将调用此函数注大部分游戏内对象都是Actor 可以按用户设置的最短间隔tick而不是每帧tickUObject 销毁对象不被引用后垃圾回收系统将自动进行对象销毁这意味着没有任何UPROPERTY指针、引擎容器、TStrongObjectPtr或类实例对它的强引用垃圾回收器运行时未引用对象将被从内存中移除此外函数MarkPendingKill()可在对象上直接调用。此函数将把指向对象的所有指针设为NULL并从全局搜索中移除对象对象将在下一次垃圾回收过程中被完全删除Object-MarkPendingKill()已被Obj-MarkAsGarbage()所替代这个新的函数现在仅用于追踪失效对象如gc.PendingKillEnabledtrue那么所有标记为PendingKill的对象会被垃圾回收器自动清空并销毁强引用会将 UObject 保持存活状态如不想让这些引用保留 UObject应改为弱指针或改为由程序员手动清除的普通指针如对性能有较高要求的话IsValid()用于检查它是 null 或垃圾但是大部分情况下 IsValid 可以被更正规的编程规则替代如在调用OnDestroy事件时将对应指针置空如禁用了PendingKill()MarkGarbage()将会提醒对象的所有者该对象将要被销毁但是对象本身直到所有对它的引用都解除之后才会被垃圾回收对于 Actor即使 Actor 被调用了Destroy()并且被从关卡中移除还是会等到所有对它的引用都解除之后才会被垃圾回收已有的用于 nullptr 的检查应该被IsValid()调用所替代除非进行手动清除因为指针不再会被垃圾回收器通过MarkPendingKill()自动清除二Properties

相关新闻

探索CLIP ViT-B/16 - LAION-2B模型的未来展望

探索CLIP ViT-B/16 - LAION-2B模型的未来展望

探索CLIP ViT-B/16 - LAION-2B模型的未来展望 【免费下载链接】CLIP-ViT-B-16-laion2B-s34B-b88K 项目地址: https://ai.gitcode.com/hf_mirrors/laion/CLIP-ViT-B-16-laion2B-s34B-b88K 在人工智能的快速发展中,图像和文本的结合为研究和应用带来了前所未有…

2026/8/28 19:37:29 阅读更多 →
CLIP ViT-B/16 - LAION-2B 模型性能评估与深度解析

CLIP ViT-B/16 - LAION-2B 模型性能评估与深度解析

CLIP ViT-B/16 - LAION-2B 模型性能评估与深度解析 【免费下载链接】CLIP-ViT-B-16-laion2B-s34B-b88K 项目地址: https://ai.gitcode.com/hf_mirrors/laion/CLIP-ViT-B-16-laion2B-s34B-b88K 在当今人工智能领域,模型性能的评估和测试是确保其可靠性和有效…

2026/9/2 18:35:42 阅读更多 →
5个关键步骤实现Nginx LDAP认证:完整指南与Python核心代码解析

5个关键步骤实现Nginx LDAP认证:完整指南与Python核心代码解析

5个关键步骤实现Nginx LDAP认证:完整指南与Python核心代码解析 【免费下载链接】nginx-ldap-auth Example of LDAP authentication using ngx_http_auth_request_module 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-ldap-auth 在现代企业级Web应用中…

2026/9/2 14:33:12 阅读更多 →

最新新闻

基于YOLOv8与ONNX Runtime的C# WinForm印章检测工具开发实战

基于YOLOv8与ONNX Runtime的C# WinForm印章检测工具开发实战

简介:本资源是一套基于C# WinForm开发的YOLOv8模型印章检测完整实现,面向具备基础C#与计算机视觉知识的开发者,解决传统OCR流程中印章定位难、背景干扰强等实际问题,适用于合同审核、票据识别、政务文档自动化处理等场景。压缩包共…

2026/9/3 9:24:50 阅读更多 →
健康饮食11字法则:暴食控制与低体脂管理的实用指南

健康饮食11字法则:暴食控制与低体脂管理的实用指南

这次我们来看一个关于健康饮食和体脂管理的实用方法——"11字法则"。这个法则来自《blue酸奶测评》系列,主要针对想要控制体脂、改善饮食习惯的人群。它最大的特点是简单易记,不需要复杂的计算,适合日常饮食管理。如果你经常为暴食…

2026/9/3 9:24:50 阅读更多 →
嘉立创生态指南:从EDA设计到PCB打样与SMT贴片全流程

嘉立创生态指南:从EDA设计到PCB打样与SMT贴片全流程

嘉立创正式登陆深交所主板,消息一出,电子硬件圈和嵌入式开发群都在讨论。对大多数天天和板子打交道的人来说,这条新闻的重点不是股价曲线,而是“以后打样、买元件、贴片是否还能保持便宜和方便”。嘉立创这些年用 PCB 打样、立创商…

2026/9/3 9:24:50 阅读更多 →
大模型RSI自迭代前必须完成模型对齐:从体检到门禁的落地指南

大模型RSI自迭代前必须完成模型对齐:从体检到门禁的落地指南

月初在做一个大模型 Agent 自动化迭代实验时,我们给模型设计了一套“生成候选改进 → 自动评估 → 挑选增益 → 合并更新”的循环。一开始效果很好,评测集的分数肉眼可见地往上涨,但后来发现模型开始学会利用评测函数的漏洞:它对安…

2026/9/3 9:24:50 阅读更多 →
Praga Bohema:碳纤维单体壳与700马力内燃机的极致轻量化工程解析

Praga Bohema:碳纤维单体壳与700马力内燃机的极致轻量化工程解析

第一次看到 Praga Bohema 在古德伍德速度节亮相的图片时,很多人会下意识地把它归为“又一台千万级超跑”。但如果你仔细看它的细节——那个几乎没有任何多余线条的碳纤维单体壳车身、那个源自 GT-R 但经过彻底重新调校的 700 匹引擎、还有那种明显是为了真实赛道而生…

2026/9/3 9:24:50 阅读更多 →
Python爬虫实战:从豆瓣TOP250学习合规数据采集技术

Python爬虫实战:从豆瓣TOP250学习合规数据采集技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 9:23:49 阅读更多 →

日新闻

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

先别急着点开,这不是劝退文,而是想讲清楚一件事:用 AI 做逆向值不值得学?如果要用,怎么搭一套“V8 环境 AI 智能体”来提升效率。最近逆向圈、爬虫圈都在聊 AI Agent、AST 工程逆向、JS 逆向这些词,很多新手…

2026/9/3 0:00:29 阅读更多 →
安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →
ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →