这篇文章介绍了在ue4中实现异步加载关卡的方法,以及我对应的思考。
背景
在很多游戏中都有用到关卡的异步加载,关卡的异步加载指的是在游戏的某个阶段,使用多线程的方法进行新关卡对应的内容加载。从而能够免去直接的Loading阶段,提升游戏体验的效果。
目前这种方法被广泛运用于各种游戏,例如在游戏战神Ⅲ中,主角有时会走过一段长长的山道,在此时实际上游戏就已经在开始加载下一个关卡了(当主角走出山道时如果还没有加载完,则会显示Loading界面);又例如在游戏暗黑血统Ⅱ中,主角解开谜题从一个房间进入下一个房间时,往往会有一段比较长时间的推门动作,此时也是在进行对应关卡的加载……
Transition Map与异步加载关卡的异同
有人可能会将Transition map和异步加载关卡混为一谈,但实际上这两者是不一样的。异步加载关卡指的是在当前的主关卡中,使用其他线程进行内容的加载。而Transition Map指的是在需要进行加载时,给玩家一个几乎瞬间就能加载完的关卡,这个关卡可能含有一些小游戏或者训练内容。
说句题外话,这个东西在1995年被Namco申请了专利O__O ” US Patent 5,718,632,好在这项专利在2015年已经过期了……读者如果有兴趣可以阅读对应的资料,传送门。
在UE4中的实现
以下的代码是我在整理以前的代码的时候翻出来的,参考来源忘了。如果读者看到之后能给出来源我将不胜感激……
.h文件

[代码]:

1 DECL<a href="http://www.52vr.com/armr/" style="font-weight: bold;color: ;" target="_blank">AR</a>E_DYNAMIC_DELEGATE(FOnPackageLoaded);
2  
3     UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "TransitionLevel")
4     static bool LoadLevelAsync(const FString& InName, TArray<fstring> Packages, FOnPackageLoaded OnPackageLoaded);</fstring>

.cpp文件

[代码]:

01 bool UMainFunctionLibrary::LoadLevelAsync(const FString& InName, TArray<fstring> Packages, FOnPackageLoaded OnPackageLoaded)
02 {
03     FTimerHandle* TimerHandle = nullptr;
04  
05     LoadPackageAsync(InName, FLoadPackageAsyncDelegate::CreateLambda([=](const FName& PackageName, UPackage* LoadedPackage, EAsyncLoadingResult::Type Result) {
06         OnPackageLoaded.ExecuteIfBound(); }),
07         0, PKG_ContainsMap);
08  
09     return true;
10 }</fstring>

代码应该比较好阅读……这里就不再赘述了。比较推荐的方法是先载入对应的子关卡和子资源,然后进行Open Level/Travel Level…方法。
对应思考
在我进行对应的实验过程中,发现在某些情况下还是出现瞬间的Hitch情况,帧率依然不稳定。
此时的原因是由于在进行Load Map的过程中存在着大量的I/O,如果出现单个资源文件太大(例如极高分辨率的贴图等)的情况下,则会出现很严重的Hitch。
因此可以考虑将一些重要的资源分解为其他较小的资源,从而进行异步读取,这可能会是一个不错的处理方法。

<全文完>

作者:谁允许你直视本大叔的

本文转自:52VR.com  Unreal Engine 4 http://www.52vr.com/article-881-1.html

Unreal Engine 4 —— 异步加载关卡的实现方法及思考相关推荐

  1. Unity异步加载关卡

    Async异步加载 一.异步加载是什么? 二.使用异步加载 1.SceneManager.LoadSceneAsync(); 2.UI显示加载进度 3.设置为加载完成后,按下任一按键进入场景 一.异步 ...

  2. 实现JS异步加载的三种方法

    一.为什么要写异步加载: ①js加载本身是属于同步加载的,加载js文件会阻塞文档,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作.但是有些工具方法需要按需加载,有一些工具js文件它是不 ...

  3. 异步加载js文件的方法总结

    方法一,jQuery.getScript HTML 代码: 代码如下 复制代码 <button id="go">Run</button> <div c ...

  4. 异步加载场景与异步加载游戏资源

    异步加载场景与异步加载游戏资源 Application.LoadLevel 加载关卡 在同步加载游戏场景的时候通常会使用方法Application.LoadLevel 加载关卡. 该方法在执行完App ...

  5. UE4 C++ 类的4种引用类型,和异步加载资产

    UE4 C++ 类的4种引用类型,和异步加载资产 4种引用类型 对象引用:引用 World 的实例对象. 就是直接定义 UPROPERTY(EditAnywhere,BlueprintReadOnly ...

  6. json,异步加载,回调函数

    json,异步加载,回调函数 json文件格式 json文件格式传送的是对象 但是服务器接收以及发送的都是文本,Linux系统中飞的都是文本.. json文件中的对象属性名都要双引号包裹起来,以区别一 ...

  7. SpiderMan:异步加载,图片爬取,数据库存储,多进程爬虫,IP代理

    1,使用API 1.1,API使用方法 API是通过Requests请求和服务端的Response回应来完成API的一次调用,所以用Python语言进行API的调用时,便可以使用Requests库来进 ...

  8. Android 图片异步加载

    所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行. 看看你有没有这种需求:某篇文章图片很多,如果在载入文章时就载入所有图片,无疑会延缓载入速度,让用户等更久,所以,我 ...

  9. echarts asp mysql 源码_如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)...

    ECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息.ECharts官网提供了中国地图.世界地图等地图数据下载,通过js引入或异步加载json文件的形式调用地图. 本文将结合实例 ...

最新文章

  1. [PHP] 深度解析Nginx下的PHP框架路由实现
  2. Actor-ES框架:Ray
  3. 字符串字段当条件查询的时候需要加引号吗_如此详细的SQL优化教程,是你需要的吗?...
  4. 【总议程】2021全球分布式云大会·上海站明日开幕!墨天轮将全程线上直播
  5. futuretask java_Java并发编程一(FutureTask)
  6. [转帖] 国产x86-海光禅定 2018年营收过亿?
  7. 串口连接BBB(三)
  8. JAVA集成腾讯云即时通讯IM服务端
  9. python怎么弄成黑色背景图片_python 实现将小图片放到另一个较大的白色或黑色背景图片中...
  10. 网站漏洞测试分析查找问题攻防演练
  11. cmd命令行使用pip install XXX库时,出现安装失败。
  12. JS事件对象 (event)
  13. 50个直击灵魂的问题_直击心灵的48个问题
  14. 树莓派python图形化编程_BlockPi: 树莓派图形化编程软件,轻松控制GPIO、SenseHAT、Picamera等硬件。...
  15. android判断两个图片相同,android中比较两张图片的相似度
  16. 为了防止同行偷窥行业机密,小明决定将上面的实际营业额重新记录一份,这次记录的时候,把上面数组中的内容倒着记录,并将所有的负数按0记录。请你帮小明把上面的结果按小明的规则重新保存到一个新数组中,并打印出
  17. Tomcat优化总结
  18. 判断素数(java语言编写)
  19. 企业注销要谨慎,这些注意事项你要知道
  20. H3CIE A套实验配置

热门文章

  1. css之文本两端对齐的两种解决方法
  2. 将多个csv文件导入到pandas中并串联到一个DataFrame中
  3. 如何使用C或C ++获取目录中的文件列表?
  4. Promise从入门到精通
  5. 聊聊flink的OperatorStateBackend
  6. Lua 生成凌晨与午夜时间戳的函数
  7. 计算机相关概念总结(3)
  8. The UVALIVE 7716 二维区间第k小
  9. Webpack模块化原理简析
  10. 数据库设计原则【转】