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

news/2024/11/2 9:20:41/

文章目录

  • 前言
  • 一、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.ppmy.cn/news/641622.html

相关文章

ips版面与tn的区别

IPS是广视角面板&#xff0c;可视角度&#xff0c;色彩还原好&#xff0c;过度自然&#xff0c;适合看电影&#xff0c;图片&#xff0c;价格高 TN面板视角窄&#xff0c;色材还原不真实&#xff0c;细节表现力差&#xff0c;但响应速度快&#xff0c;耗电低&#xff0c;适合游…

前端代码规范与最佳实践

1. 代码规范的重要性 在前端开发中&#xff0c;代码规范是非常重要的。它可以提高代码的可读性、可维护性和可扩展性&#xff0c;减少bug的产生&#xff0c;并且方便多人协作开发。本文将介绍一些前端代码规范的最佳实践&#xff0c;并给出一些示例。 2. HTML代码规范 2.1 使…

哪个骨传导蓝牙耳机的好,分享几款知名度高的骨传导耳机

骨传导耳机是一种通过头骨传递声波的耳机&#xff0c;相比于传统的耳机&#xff0c;骨传导耳机不用塞进耳道&#xff0c;而是在耳后的骨头里将声音传递到耳膜。而且因为不塞进耳朵&#xff0c;所以不用担心在使用过程中因为佩戴时间过长而导致的耳朵不适。所以相比于传统耳机来…

骨传导耳机哪个品牌的音质好、骨传导耳机音质对比

骨传导耳机相对于普通蓝牙耳机&#xff0c;佩戴不入耳能解放我们的耳朵&#xff0c;同时也可以听见外界的声音&#xff0c;在户外运动或者健身房锻炼时佩戴都特别的方便。但是很多朋友表示骨传导耳机是只能听个响&#xff0c;没有音质可言&#xff01;其实随着科技的发展&#…

苹果系统tft选哪个服务器不卡,tft和ips选哪个 tft和ips区别介绍【图文】

手机屏幕是智能手机的一大卖点&#xff0c;很多手机企业都会在屏幕上大作文章&#xff0c;吸引消费者们的关注。随着宣传多了&#xff0c; 现代 人在购买手机的时候&#xff0c;也会留意手机屏幕。目前手机屏幕主要有两种类型&#xff0c;一为tft屏幕&#xff0c;一为ips屏幕&a…

(四)python实战——Sqlite3数据库表的增、删、查、改操作案例

前言 Sqlite3是一个轻量级的数据库&#xff0c;本节内容我们介绍一下如何在python环境中使用Sqlite数据库&#xff0c;完成数据库表的简单增、删、查、改操作。开始本节内容之前&#xff0c;我们需要先安装好python环境&#xff0c;我们使用的是python3的环境。 正文 ①创建…

JKD动态代理

在Java的动态代理机制中&#xff0c;有两个重要的类和接口&#xff0c;一个是InvoInvocationHandler&#xff08;接口&#xff09;、Proxy&#xff08;类&#xff09;&#xff0c;这一个类和接口是我们动态代理所必须用到的。 InvocationHandler接口&#xff1a; 每个动态代理…

电话无法接通?

使用饭碗警告时&#xff0c;如果遇到电话无法接通的情况&#xff0c;通常是因为被手机或运营商拦截&#xff0c;如果您无法收到电话报警&#xff0c;请排查下列因素&#xff1a; 确认手机常通&#xff0c;部分手机即使有信号显示&#xff0c;仍然无法拨通&#xff0c;在双卡时…