文章目录

  • 前言
  • 一、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教程(三)

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

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

    文章目录 前言 LevelInstance的使用 1.ALevelInstance 2.选择Actor创建关卡 3.运行时加载LevelInstance 总结 上一篇:虚幻引擎(UE5)-大世界分区W ...

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

    文章目录 前言 一.Data Layers的使用 1.添加Actor到Data Layers 2.运行时处理 总结 上一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(三) 前言 ...

  3. 虚幻引擎(UE5)最佳集成CesiumforUE教程(一)

    虚幻引擎(UE5)最佳集成CesiumforUE教程(一) UE集成CesiumUE插件使用 文章目录 虚幻引擎(UE5)最佳集成CesiumforUE教程(一) 前言 一.项目创建 二.新建光卡 二 ...

  4. 虚幻引擎5:快速入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:5.63 GB |时长:5h 23m 从 ...

  5. [虚幻引擎][UE5]获取当前系统的时间

    [虚幻引擎][UE5]获取当前系统的时间 方法一: 方法二: 方法三: 方法一: 效果: 方法二: 效果: 缺点:没有办法都是两位 方法三:

  6. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  7. Python for虚幻引擎编辑器工具脚本学习教程

    Python for Unreal Engine Editor Tools Scripting MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英 ...

  8. 虚幻引擎VR游戏开发基础教程

    虚幻引擎VR游戏开发基础教程 了解如何使用 Oculus Quest 2 的蓝图在虚幻引擎 4 中从头开始构建基本的 VR 机制 课程英文名:Unreal Engine VR Development ...

  9. 颠覆游戏开发,虚幻引擎 UE5 正式发布

    整理 | 章雨铭 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 4月6日,UE5正式发布! 体验完UE5的新功能后,3D游戏狂热爱好者感叹:"惊呆了,老铁!"美工直 ...

最新文章

  1. 面向新闻媒体的命名实体识别技术
  2. css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的...
  3. 创新工场CE0李开复:互联网创业黄金时代来临
  4. 如何确定你的伴侣真的爱你?复杂数学公式告诉你
  5. html列表按时间排序代码_按字母顺序排序的列表
  6. Bootstrap 导航
  7. JavaScript基础知识(四)
  8. UISegmentedControl
  9. SSM社区医院卫生所病人患者随访信息管理javaweb网站系统设计与实现
  10. 【aws smart home】Aleax skill环境搭建
  11. 懂生意的产品经理,才能做好商业化
  12. pycharm中遇到的报错 Unexpected indent / unindent does not match any outer indentation level
  13. STM32与FPGA Cyclone IV芯片fsmc通信
  14. vscode中输入感叹号无法识别html模板
  15. 隐蔽的API:基于RevitNET操作Revit文档。
  16. C/C++ 简单排序之冒泡排序
  17. js对金额数据添加最大金额单位【千、万、十万...】
  18. 远光天擎 | 研发运维一体化智能云平台
  19. 【收藏】如何优雅的在 Python设置报警通知(邮件、短信、电脑外放声音)
  20. MySQL连接查询—自身连接

热门文章

  1. 我心目中的编程高手(完整版)
  2. 不差钱的滴滴为什么着急上市?
  3. vmware安装hadoop(多台机相连)(二)
  4. vue 移动端可拖拽式icon图标
  5. 三国风云辅助工具——乌鸦的机器人
  6. 对抗攻击算法总结论文集合(白盒、黑盒、目标检测、对抗训练等)
  7. 年轻一代的奢侈品消费观
  8. IntelliJ IDEA 项目中如何隐藏和显示.idea文件夹
  9. H3C irf交换机故障替换演练
  10. 抖音矩阵系统,抖音SEO源码独立部署,look here