虚幻引擎(UE5)-大世界分区WorldPartition教程(二)

文章目录

  • 前言
  • 一、OFPA怎么用
  • 二、OFPA怎么用
  • 总结


上一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(一)

前言

在UE4版本中中,Actor是保存在关卡文件中的,也就是说,如果要编辑关卡中的某些Actor,需要签出关卡文件进行编辑,这种编辑粒度有可能会造成多人协作中工作流上的冲突,比如有多人想编辑某个关卡中的Actors,那么他们必须等待前一个人编辑完后才能编辑

因此,在UE5中细化了编辑粒度,将关卡中的每个Actor保存到一个单独的文件中而非关卡中,即所谓的一个Actor一个文件(One File Per Actor,OFPA),这意味着协作工作者只需签出自己想要编辑的Actor进行编辑即可,解决了工作流冲突问题


提示:以下是本篇文章正文内容

一、OFPA怎么用

如果是WP关卡,那么关卡中的Actor会默认被自动保存为外部文件,就拿游戏模板中第三人称关卡(ThirdPersonMap)来看,如上文所说,这是一个WP关卡

在创建工程之后,会在如下目录保存关卡中的所有Actor文件,并且会为关卡会生成一个同名文件夹,关卡中的Actor文件就保存在对应的文件夹中

在这里插入图片描述
在这里插入图片描述
选中关卡中的任意一个Actor(在关卡编辑区域或OutLiner都可以),然后鼠标右键,点击Copy Actor Path菜单,可以查看Actor的具体路径

在这里插入图片描述
这个时候大家应该猜的的到如果不是WP关卡的话,是创建的普通关卡,默认是禁用将Actor保存为外部文件的,它们仍然被保存在关卡中,举例如下:

再之前的普通关卡NoWP或者重新场景一个普通关卡,然后给它放一个Actor,然后右键拷贝路径会发现

在这里插入图片描述
在这里插入图片描述
会发现普通关卡复制的路径是直接指定关卡文件,就是说Actor仍然是被保存在关卡文件(.umap)中的,那如果我想要在普通关卡中开启这个One File Per Actor 一个文件一个Actor要怎么弄呢?这个时候就要打开编辑器设置开启了,操作如下:
在这里插入图片描述
在这里插入图片描述
开启后,在关卡的WorldSettings中的World部分有个Use External Actors,勾上后保存关卡(Ctrl+S)会使该关卡的所有Actor被保存为外部文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就会发现变成和开启世界分区关卡一样的存储路径了。

普通关卡中的Actor还可以指定是否开启OFPA,具体操作如下:

选中Actor,然后去到它的Details面板,展开其中的Actor部分中的Advanced,其中有一个Packaging Mode(可以直接搜Packaging),然后选择External或Internal
在这里插入图片描述
External,该Actor会被保存为外部文件
Internal,该文件会被保存到关卡文件中

有了OFPA之后,我们可以针对Actor进行修改,并不会导致关卡被修改,如下图我修改了关卡中的SM_ChamferCube的位置,只会影响该Actor并不会影响当前关卡

官方文档有说基于当前关卡的所有子关卡需要手动勾选Use External Actors应该是预览版才需要这样做,正式版本中会默认保持
和父关卡一致,即使在非WP关卡中创建子关卡也有一个默认勾选的选项

在这里插入图片描述

二、OFPA怎么用

那么文件是如何与关卡中的Actor关联起来的?

如何将关卡中的Actor保存为外部文件的代码比较简单,起始位置为ULevel::ConvertAllActorsToPackaging,最终调用HashObjectExternalPackage方法,该方法就是将Actor对象与外部文件对应起来的关键

void HashObjectExternalPackage(UObjectBase* Object, UPackage* Package)
{if (Package){FUObjectHashTables& ThreadHash = FUObjectHashTables::Get();FHashTableLock LockHash(ThreadHash);UPackage* OldPackage = AssignExternalPackageToObject(ThreadHash, Object, Package);if (OldPackage != Package){//将Object、Package放入PackageToObjectListMap中AddToPackageMap(ThreadHash, Object, Package);}}else{UnhashObjectExternalPackage(Object);}
}

值得注意的是,OFPA机制只存在于编辑器中,在运行时候,Actor还是会被添加进Level中,代码如下:

AActor* UWorld::SpawnActor( UClass* Class, FTransform const* UserTransformPtr, const FActorSpawnParameters& SpawnParameters )
{//...// actually make the actor objectAActor* const Actor = NewObject<AActor>(LevelToSpawnIn, Class, NewActorName, ActorFlags, Template, false/*bCopyTransientsFromClassDefaults*/, nullptr/*InInstanceGraph*/, ExternalPackage);//添加到Level中LevelToSpawnIn->Actors.Add( Actor );
}

总结

以上就是今天要讲的内容,本文仅仅简单讲解了OFPA机制要解决的根本问题就是关卡的编辑粒度问题,OFPA机制只存在于编辑器中,在运行时候,Actor还是会被添加进Level中

下一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(三)

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

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

相关文章

炫技亮点 Websocket集群解决方案汇总

文章目录 问题方案方案一&#xff1a;~~Session共享~~&#xff08;不可行&#xff09;方案二&#xff1a;负载均衡器&#xff08;状态路由&#xff09;方案三&#xff1a;广播机制&#xff08;异步方式 - 建议&#xff09;方案四&#xff1a;路由转发&#xff08;同步方式&…

量子力学的起源和基本概念

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在我们的第一篇文章中&#xff0c;我们进行了量子力学的总体介绍。今天&#xff0c;我们将深入探讨量子力学的起源和一些基本概念。 量子力学的起源可以追溯到20世纪初&#xff0c;当时的科学家们遇到了一些古典物理…

【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

windows10系统下修改jar中的文件并重新打包成jar文件然后运行 一、背景描述二、操作步骤2.1 解压jar包2.2 修改配置文件2.3 重新打成jar包2.4 确认是否修改成功2.5 运行程序 一、背景描述 测试环境&#xff08;Linux&#xff09;的代码&#xff08;jar包&#xff09;拉取到本地…

Java之集合Collection

Collection接口有两个子接口&#xff1a;List(链表|线性表)和Set(集) ---|Collection: 单列集合---|List: 有存储顺序, 可重复---|ArrayList: 数组实现, 查找快, 增删慢由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以…

【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从原理到应用的全面指南” (从一维、二维、三维讲解)

🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩…

设计模式3:单例模式:JMM与volatile和synchronized的关系

本文目录 JMM简介Java 内部内存模型(The Internal Java Memory Model)硬件内存架构(Hardware Memory Architecture)弥合 Java 内存模型和硬件内存架构之间的差距(Bridging The Gap Between The Java Memory Model And The Hardware Memory Architecture)1.共享对象的可见性2.竞…

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

代理服务器之 squid、lvs、nginx、haproxy之间的区别

代理服务器之 squid、lvs、nginx、haproxy之间的区别 代理服务可简单的分为正向代理和反向代理 1、正向代理 正向代理服务器&#xff1a;squid 用于代理内部网络对 Internet 的连接请求(如 VPN/NAT)&#xff0c;客户端指定代理服务器,并将本来要直接发送给目标 Web 服务器的 HT…

Spring Resources资源操作

文章目录 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteArrayResource 4、Resour…

Keil MDK编程环境下的 STM32 IAP下载(学习笔记)

IAP的引入 不同的程序下载方式 ICP ICP(In Circuit Programing)。在电路编程&#xff0c;可通过 CPU 的 Debug Access Port 烧录代码&#xff0c;比如 ARM Cortex 的 Debug Interface 主要是 SWD(Serial Wire Debug) 或 JTAG(Joint Test Action Group)&#xff1b; ISP ISP(I…

PostgreSQL处理JSON数据

源&#xff1a;https://blog.csdn.net/c_zyer/article/details/130968257?ops_request_misc&request_id&biz_id102&utm_termPostgreSQL%20%E7%9A%84JSON%20%E5%A4%84%E7%90%86&utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-…

Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…