当前位置: 首页 > news >正文

秋招笔记-8.31

我们先再整体回顾下昨天学习的虚幻引擎GamePlay,网络,动画,UI相关的内容,然后再看看项目里哪些可以提问的内容。

这些宏(UCLASS、UENUM、UINTERFACE、USTRUCT、UFUNCTION、UPROPERTY)都是虚幻引擎反射系统的核心组件,它们将普通的C++代码标记为可被引擎识别和处理的反射对象,使得类、枚举、接口、结构体、函数和属性能够在虚幻编辑器中显示、支持蓝图交互、实现序列化,并与其他引擎系统无缝集成,从而大大简化了游戏开发流程。

TArray是虚幻引擎中的动态数组容器,底层采用连续内存存储,维护Data指针、Count(元素数量)和Max(容量)三个核心成员,支持O(1)随机访问和动态扩容,具有类似std::vector的特性但集成了引擎的分配器和序列化系统,还提供排序、堆化、查找等高级功能,其中Slack(Max-Count的差值)是其内存优化机制,通过预留空间避免频繁重新分配来提升性能。

虚幻引擎的数据容器大致功能和STL中提供的数据容器类似,提供了更多的API,可以被引擎识别后通过虚幻引擎的GC机制分配和管理内存,可以被蓝图系统识别。

FSoftObjectPath 和 TSoftObjectPtr 是虚幻引擎中实现软引用的核心机制:前者是存储资产路径的字符串结构体(如 "/Game/Texture"),提供基础路径操作和显式加载;后者是基于前者的模板类(如 TSoftObjectPtr<UTexture>),通过类型安全封装实现自动引用跟踪、延迟加载和内存安全管理。两者共同解决硬引用导致的内存常驻问题,使开发者能安全实现动态资产加载/卸载,为开放世界流式加载和资源热更新提供关键技术基础。

所谓的软引用就是在代码中声明对资产的引用时,不直接加载资产本身到内存,而是仅将资产的路径字符串(如 "/Game/Characters/Hero")存储在内存中。只有当游戏运行时显式调用加载函数(如 LoadSynchronous() 或异步加载请求)或实际访问资产内容时,引擎才会根据路径动态加载资产到内存。

资源注册表(Asset Registry) 是虚幻引擎的全局元数据库,在编辑器启动时扫描所有资产(.uasset),提取并缓存资产的元数据(如类型、路径、标签、依赖关系等),提供免加载的运行时查询能力,实现高效资产检索和依赖分析。对象库(Object Library) 是基于资源注册表构建的动态容器,将特定目录/标签的资产组封装为逻辑单元,提供批量路径存储、异步加载和动态过滤功能,简化资产组的按需加载与管理。两者协同支撑动态资源系统,是开放世界流式加载的核心基础设施。

资源注册表是引擎级基础系统,管理所有资产类型(包括数据资产)的元数据,提供通用查询接口;数据资产注册表是项目级应用工具,通常由开发者基于资源注册表构建,专门针对 UDataAsset 派生类进行优化,常直接加载数据资产实例以实现快速配置访问。

Core Redirects 是虚幻引擎的引用修复系统,通过预定义规则(在 DefaultEngine.ini 中配置路径/类名/属性名的映射关系),在序列化或加载过程中自动将旧标识符(如废弃的资产路径、重命名的类或属性)实时重定向到新标识符,解决项目重构、资产迁移或插件升级导致的引用断裂问题,确保兼容性且无需手动修改现有资产或代码。

硬引用(Hard Reference) 是直接持有资产对象指针(如 UPROPERTY UTexture* TextureRef),导致被引用资产随父对象常驻内存(启动即加载,无法卸载),适用于高频访问的核心资源(如玩家模型)。

软引用(Soft Reference) 仅存储资产路径(如 TSoftObjectPtr<UTexture> SoftTexture),通过路径字符串按需异步加载,资产可动态卸载,适用于低频/动态资源(如场景道具、UI图标),避免内存浪费。

虚幻引擎对字符串处理的优化包括:FName 将字符串(如 "Player")转换为唯一整数ID存储于全局哈希表,相同字符串复用索引,使比较操作转为高速整数比对,避免重复内存分配;FString 对小字符串(≤128字符)栈内预分配,大字符串采用指数扩容策略(128→256→512)并复用内存池,减少堆分配次数与碎片。

虚幻引擎的Tasks System是一个多线程任务调度框架,允许开发者将复杂工作分解为独立任务单元并在多核处理器上并行执行,通过任务队列、依赖关系管理、负载均衡和异步回调机制,实现高性能并发处理,简化多线程编程复杂性,特别适用于计算密集型操作(如物理模拟、AI计算、资源处理)的性能优化。

虚幻引擎的配置文件(.ini 文件)是引擎的初始设置系统,采用键/值对格式并按分段(如 [SystemSettings]、[Engine])组织,用于为所有平台和版本设置引擎启动时加载的对象属性默认值,包括渲染设置、物理参数、音频配置、网络选项等,开发者可通过修改这些文件(如 DefaultEngine.ini、DefaultGame.ini)来定制引擎行为,且支持继承机制(项目级配置可覆盖引擎默认值)。

MassEntity的群体避障基于社会力模型(Social Force Model)实现,每个实体维护以自身为中心的斥力场,当实体间距离小于碰撞阈值时,通过斥力场计算相互作用的力向量,利用ECS(Entity-Component-System)架构的并行计算能力,结合SIMD指令和GPU并行处理,将避障计算分解为独立组件进行数据导向的并行处理,实现超大规模实体的实时避障计算。

虚幻引擎定位系统的底层原理基于射线检测(Raycast)或球体检测算法,通过从玩家视角发射射线或检测指定范围内的碰撞体来识别潜在目标,结合目标过滤条件(如标签、距离、角度)和优先级计算(如威胁等级、距离权重)来确定最佳目标,同时管理目标状态(如锁定/解锁)并提供视觉反馈(如高亮、准星),实现快速准确的目标识别和选择。

http://www.dtcms.com/a/359411.html

相关文章:

  • 在集群级别应用 Pod 安全标准
  • 【MySQL】练习12-4:启用GTID并配置循环复制
  • Conda相关的用法
  • 人工智能之数学基础:连续型随机变量
  • Langflow 评估与迭代技术深度分析
  • 3DES加解密的算法Java Python Golang
  • 【大模型面试宝典之微调篇】(一)
  • 算法之链表
  • Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
  • 四数之和的一些判断怎么记忆
  • 《哲思:生命与宇宙的终极意义》
  • 分治思想与分治算法的区别
  • C6.7:输入电阻的负载效应及其CE负反馈放大器
  • 【线性代数基础 | 那忘算9】基尔霍夫(拉普拉斯)矩阵 矩阵—树定理证明 [详细推导]
  • ICode总线原理
  • Playwright Python 教程:高级篇
  • JDK 22 Windows 64位安装教程(含环境变量配置+验证步骤+附安装包下载)
  • Qwen3_moe模型代码解析
  • 数据结构与算法:线段树(三):维护更多信息
  • 运筹说 第141期 | 启发式算法:用简单规则、破解复杂问题
  • WEB漏洞挖掘篇(一) 基本概念、十大常見WEB漏洞
  • 自底向上了解CPU的运算
  • Google 的 Agent2Agent 协议 (A2A):带示例的指南
  • 「日拱一码」068 机器学习——迁移学习TL
  • SIEPIC工具和PDK安装
  • C#语言入门详解(17)字段、属性、索引器、常量
  • 云计算与服务器
  • 【C#】在一个任意旋转的矩形(由四个顶点定义)内绘制一个内切椭圆
  • 在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器
  • Mysql中事务隔离级别有哪些?