资源管理

Q1:Unity5.4.1中,我将需要的Shader打到一个AssetBundle包中(包含一个关联了所有Shader的Shader Variants),分别用Shader.WarmupAllShaders和ShaderVariantCollection.WarmUp两种方式进行预加载,后者耗时更少。
这里用了Standard Shader做的测试,可以看到真机上两种方式耗时差距是非常大的。 请问,确实是ShaderVariantCollection的效率更高,还是我测试方法有问题?

测试代码:


Shader的AB包里的内容:

根据官方的文档的描述,确实是ShaderVariantCollection的效率更高,详见:
https://docs.unity3d.com/Manual/OptimizingShaderLoadTime.html
因为在ShaderVariantCollection中,是可以给每个Shader添加指定的Keyword的,ShaderVariantCollection.WarmUp的调用只会对ShaderVariantCollection中指定的Keyword进行Warmup操作;而Shader.WarmupAllShaders则是对所有的Keyword全部进行Warmup操作(其中大多数很可能都不会用到)。
因此在Shader.WarmupAllShaders的文档中也提到,建议使用ShaderVariantCollection.Warmup来进行细粒度的Warmup操作,避免大量多余的Keyword被Warmup,造成严重的卡顿,大家可以参考下文:
https://docs.unity3d.com/ScriptReference/Shader.WarmupAllShaders.html

此问答来自于UWA 问答社区:https://answer.uwa4d.com/question/58fabe919db5d16c66166132
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q2:我们在做MMO国战类游戏,因此想咨询下资源标准。我们同屏会有70~80个玩家,这种情况下主角一般控制在多少面,多少根骨骼呢?一个Boss有80多根骨骼会有问题吗?

这个需要看研发团队希望在什么样的机型上运行。假设是低端机器类似红米Note2,那么建议玩家都控制在30根骨骼,1500面以下。如果只有一个怪物80根骨骼,问题并不大,但还需要考虑场景中其他物体的使用量。

建议研发团队看一下这篇文章,这是我们半年前统计的关于MMO游戏的性能数据,相信能对MMO游戏的开发团队具有借鉴意义:《MMO移动游戏性能分析报告:渲染、UI、逻辑代码和内存需重点关注》

此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/58f614999db5d16c66166121
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q3:我们想请教一个Unity的普适性的资源管理问题。举个例子,我们现在的一个特效Prefab包含的贴图打成AssetBundle时没有单独拆分出来,就会存在一个问题,这个特效AssetBundle会存在重复加载的问题进而导致重复的特效贴图在内存中。(针对“重复加载”说明下:我们首先通过AssetBundle出来一个Object,这个Object会缓存一段时间,在这段缓存时间过后这个Object会被Destroy掉,而需要释放的特效是通过Instantiate这个Object出来的。当这个Object过了缓存时间被destroy掉后,下次需要释放相同的特效还是通过load同样的AssetBundle进行再实例化出来,这样内存中存在两份贴图了。)

Unity中是没有这种API来提供的,一般是团队中自行做一些资源的引用计数来进行管理。频繁调用UnloadUnusedAssets是不可取的(该函数的主要作用是查找并卸载不再使用的资源。游戏场景越复杂、资源越多,该函数的开销越大,一般在300~2000 ms范围内),但可以调用UnloadAsset来释放资源。


内存管理

Q4:我们游戏现在测试出来的GC是否合理?这个分配数值可以接受吗?是否存在泄露?如果存在泄露,有没有具体到每个函数的分配详情?

研发团队可以在测试报告中查看 Mono堆内存分析报告,这里有我们对于Mono堆内存的详细分析,包括 堆内存具体分配 和 堆内存泄露分析 两大功能,如下图所示。


就研发团队目前的数据报告来看,其堆内存分配其实是很小的,之所以有目前的堆内存调用,推测是手动调用GC的频率较高所致,研发团队可以就此再进行进一步的检测。

原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

技术分享连载(六十一)相关推荐

  1. UWA 技术分享连载 转载

    技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...

  2. 技术分享连载(六十九)

    资源管理 Q1: 在打包的时候,有一部分资源是没有设置AssetBundleName的,打包的时候会和依赖它们的资源打到同一个AssetBundle包里(Unity自动完成).在资源加载的时候,无法主 ...

  3. 技术分享连载(六十)

    资源管理 Q1:对于WWW.LoadFromCacheOrDownload(System.String url, Int32 version)这个接口的第二个参数,我知道是做缓存资源的更新用的.我们之 ...

  4. 技术分享连载(六十四)

    资源管理 Q:Unity 5 的 Shader Variant Collection 功能是否推荐使用?我有以下3个疑点: 1)使用 Shader 变体之后,Shader 是否还能走资源更新?抑或 S ...

  5. 技术分享连载(六十八)

    性能 Q1:Unity Profiler中如下函数的耗时异常高,请问是什么原因导致呢? 1)Profiler.FinalizeAndSendFrame 2)WaitForJobGroup 3)Came ...

  6. 技术分享连载(八十六)

    加载 Q1:在手机上测试LoadLevelAsync和LoadLevel的加载速度,同一个场景,LoadLevelAsync要比LoadLevel多花费40%左右的时间,请问这是正常的么?LoadLe ...

  7. 技术分享连载(七十六)

    性能优化 Q1:Unity对GameObject.active()这个底层具体做了什么?因为在优化项目的时候看见有些界面active()这个函数造成的开销比较高,我采取的办法是移除摄像机的范围,这是参 ...

  8. 技术分享连载(八十八)

    原文链接:https://blog.uwa4d.com/archives/2152.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获.如果您有任何独到的 ...

  9. 技术分享连载(八十四)

    原文链接:https://blog.uwa4d.com/archives/TechSharing_84.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获 ...

最新文章

  1. 快速清除SQL Server数据库日志的方法
  2. 函数-生成器之斐波拉契数列
  3. 打印二叉搜索树的叶子结点_求孩子兄弟树叶子节点数目
  4. Windows与linux双系统安装
  5. linux sed面试题,【2021最新版】Linux面试题总结(48道题含答案解析)
  6. centOS 7镜像文件下载
  7. 数据统一管理--企业决策分析之刚需
  8. 2011-8-13 随笔一二
  9. php立方体相册源码,制作三维电子相册 3d立方体相册制作(flash相册制作)
  10. 月入5万!这个头条号变现大招好多人都没注意到
  11. poi excel 插入批注
  12. 关于个人求职简历的一些见解
  13. mysql如何创建用户代码_mysql 创建用户 并 受权_mysql
  14. 【OpenBMC 系列】D-Bus 调试器介绍 - D-Feet
  15. 快速实现M5311 NBIOT TCP通信
  16. I/O大会上落寞离去,谷歌眼镜真的被放弃了吗?
  17. 1 华为南研所软件研发校园优招面试经历
  18. shell 批量 ping 多个IP地址
  19. 猫和老鼠服务器未响应是怎么回事,猫和老鼠手游怎么玩不了 游戏设置及异常解决方法...
  20. python的多线程使用setDaemon有什么意义?

热门文章

  1. android 虚拟键盘改变单个按键颜色_这款机械键盘很特别!一亿次按键寿命还有高颜值...
  2. 【算法系列之六】两整数之和
  3. Linux学习:第六章-Linux网络配置
  4. android nio debug模式正常 release包crash_Flutter包大小治理上的探索与实践
  5. 记一次海外大型SLG游戏服务器进程被OOM的修复经历
  6. C++实现md5加密或计算文件的唯一性识别
  7. Linux与时间相关的结构体及相关用法
  8. 《Python Cookbook 3rd》笔记(5.7):读写压缩文件
  9. 《Python Cookbook 3rd》笔记(2.1):使用多个界定符分割字符串
  10. C++使用openssl实现aes加解密,其中加密是string到文件,解密是文件到string,切合项目背景