如何利用UWA优化物理开销

栏目: Lua · 发布时间: 4年前

内容简介:这是第162篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员)

这是第162篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

本期目录:

  • 如何利用UWA优化物理开销
  • Unity中的 Lua 所占内存会统计到Profiler中吗
  • 如何获得AssetBundle加载任务的AssetBundleLoadResult
  • 如何在客户端和服务端保持Navmesh寻路计算结果相同
  • 如何设计渲染等级

Physics

Q:我们游戏项目使用UWA深度评测报告FixedUpdate.PhysicsFixedUpdate存在较大的CPU耗时,想问下这一块的耗时是怎么导致的,该如何优化?

如何利用UWA优化物理开销

A:首先,这是Unity引擎中物理模块的主要耗时开销。从图中可以看出,你们物理模块较高的一个主要原因是调用次数过高,显示了一帧中调用了17次,就算一次开销1ms,调用17次,也有17ms。所以,调用次数是需要题主项目中最需要注意的一点。游戏运行过程中物理模块的调用次数可以通过下图中的箭头查看,同时,物理的调用次数最好是每帧控制在1~3次,如下图所示。

如何利用UWA优化物理开销
而题主中的物理模块之所以会调用次数这么高,其主要原因是其他模块的耗时很卡,所以导致了物理模块的FixedUpdate在一帧中不断更新,而17次是默认情况下的上限值。物理模块有个有意思的特点,就是你的项目越卡,它会让你的项目更卡,切记!

所以,题主首先要做的是去看看其他模块改如何进行优化,优化下来后,物理模块的耗时自然就下来了。

其次,需要查看你们的项目是否确实需要物理模拟,很多项目(哪怕是MMO)的物理模拟都可以通过其他方式来代替。如果你们的项目中的物理模拟可以通过其他方式来代替,那么题主尽可能将物理模块进行关闭, 在Unity 2018及以上版本中,可以自行关闭“Auto Simulation”选项,在5.4~2017版本中,Unity引擎会根据你们物理引擎使用与否来自行关闭。

最后, UWA线上深度测评中的性能简报 中有更多的需要注意的关键点,可以根据性能简报中的建议来进行查看,同时, 还有更多其他团队遇到的相关技术问题,建议详细查看, 很多问题都是共通的,很有可能你们的项目也用的上。

如何利用UWA优化物理开销
该回答由UWA提供,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cf22493d27511377098274b

Lua

Q:Unity中Lua部分所占用的内存会被统计到Profiler中吗?如果被统计到了Profiler中,那对应会是被统计到哪一块所占内存中?Mono吗?

实测了下,在Lua中实时创建一个全局超大数组,在Profiler未看哪项数值有变动,所以结论应该是Lua所占内存不会被Profiler给统计到?

A:是的,Lua堆内存并不会在Unity Profiler中被统计到。

目前,Lua堆内存只能通过第三方工具(比如UWA GOT Online)来进行统计。具体可以查看这篇文章: 新功能!Lua,是时候和你走走心了!

游戏运行时的Lua总内存查看:

如何利用UWA优化物理开销

每一帧的具体Lua堆内存分配查看:

如何利用UWA优化物理开销
该回答由UWA提供,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cf33be5d275113770982750

AssetBundle

Q:最近找到Unity里面有一个叫AssetBundleLoadResult的枚举值。目测这个枚举值是用来反馈一次AssetBundle加载任务的结束状态(错误原因)。

https://docs.unity3d.com/2019.1/Documentation/ScriptReference/AssetBundleLoadResult.html

但是实际在Untiy的各个AssetBundle相关的API中,我没有找到获得这个枚举值的方法。而且几个常用接口CreateFromXXX之类的,不管同步还是异步,出现错误只是返回空值,错误输出直接打进LogError,除了直接截取Log外,还没有想到其他解决方法。

不知道各位有没有能够获得这个值的方法,或者有没有其他干净的获得加载失败原因的方法?

A:这个枚举使用在AssetBundle.RecompressAssetBundleAsync的AssetBundleRecompressOperation中。

有相关的API:AssetBundleRecompressOperation.result,主要用于描述将AssetBundle的压缩方式转换到另一种压缩方式的状态。

https://docs.unity3d.com/2019.1/Documentation/ScriptReference/AssetBundleRecompressOperation.html

官方未提供任何的修复AssetBundle的机制,建议方式是自己对比MD5值,如果不一致就下载新的,本地AssetBundle失败无非两种,文件损坏或修改,或者不存在。

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cf5cf17a937dc376b4ccee8

Navmesh

Q:我这边尝试使用客户端使用Unity原生的Navmesh,服务端使用Recast,使用客户端导出Navmesh给服务端。

但是因为Unity对Recast进行了修改,所以更正确的情况或许应该是客户端和服务端都是使用Recast进行导航。

所以如何在Unity客户端中直接使用Recast?或者有什么其他的客户端服务器使用同一套寻路方案的方法吗?

A1:赞同你的思路。通过统一的数据和计算过程来保持寻路计算结果相同。在Unity没有开放自己修改过的Navigation源码的情况下,更好的方式是都使用recastnavigation的算法。由于recastnavigation是基于C++的,因此需要以native plugin的方式接入到Unity。

其他方案,如果不是很大和有很复杂的结构的地图,也可以基于A算法来做,导出一份标记了可行走区域的Grid数据。客户端和服务器共用一套A寻路算法。

感谢张锐@UWA问答社区提供了回答

A2:即使你客户端和服务器使用了相同的Recast&Detour,也不会得到相同的运算结果,这个系统都是基于浮点数运算的,得不到完全一致的结果,如果是服务器主导的寻路倒是没啥问题,除非,你要么使用Grid这种传统的整数格子寻路,要么实现定点数版本的Recast&Detour。

首先我觉得是否可以使用多线程跟寻路算法是无关的,原生的Recast对多线程的支持并不友好; 客户端想完全自己控制的话,可以考虑使用Unity 3D AssetStore的一个 A* Pathfinding Project Pro的寻路插件 ,提供了三种寻路算法:Navmesh、Grid、Waypoint,实现了协程和多线程计算。我们项目以前用过,如果服务器使用的是Phong这种C#语言,应该很容易移植;如果服务器是C++ 使用了Recast,也许客户端可以考虑改造AStarPathFindingProject和C++ Recast两者之一来实现相同的算法。但是这样做代价高昂,也依然不能得到完全一致的结果,需要一致的运算首先不能使用浮点数。

我觉得你还是需要仔细评估你们项目的需求,Recast不是万能的,大规模场景快速获取结果适合但有误差,传统格子A*适合小场景适合服务器客户端一致,每种寻路算法都有优缺点,你需要根据核心的需求去选择评估。

另外,UWA学堂里我的那篇 《Unity引擎Navmesh的导出及应用》 是将Unity的Navmesh导出到Recast使用,也无法满足前后端运算结果一致,适合服务器需要客户端制作的数据然后来主导寻路。

感谢Yaukey@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cf4fa55d2751137709827fc

Render

Q:现思考如何设计项目中的渲染等级,求有经验的大佬指个方向,例如ShaderLOD,还有其他什么思路吗?谢谢!

A:可以补充一下,目前我们这边尚未完善渲染等级模式,不过对于分级消耗的处理,其实没有提到的一点,就是根据手机型号自适应当前的分级,诊断如下:

需要建立一张表格:

如何利用UWA优化物理开销

类似这样的方式。然后客户端根据当前的手机型号,或者分配方式对应相应的调整,来自动化节省消耗。

另外,针对其参数,可以取当前的帧率来判断,保证游戏的流畅度,即当手机帧率下降时,主动提示玩家需要降低渲染等级,以保证平滑度。因为手机性能有时候会随着电池的发热而降低,是波动的。

由于篇幅有限,更多精彩回答,戳以下链接即可查看

感谢马古斯@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5acc208b425802635474fc7d

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

UWA学堂:edu.uwa4d.com

官方技术QQ群:793972859(原群已满员)


以上所述就是小编给大家介绍的《如何利用UWA优化物理开销》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro HTML5 and CSS3 Design Patterns

Pro HTML5 and CSS3 Design Patterns

Michael Bowers / Apress / 2011-11-15 / GBP 35.50

Pro HTML5 and CSS3 Design Patterns is a reference book and a cookbook on how to style web pages using CSS3 and HTML5. It contains 350 ready--to--use patterns (CSS3 and HTML5 code snippets) that you ca......一起来看看 《Pro HTML5 and CSS3 Design Patterns》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具