技术分享连载(六十一)

资源管理

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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ(三) 集群配置

RabbitMQ——集群配置 之前不管是搞Redis、SQL、Mongo还是其他的东西,一律都没说过集群要怎么搞,电脑实在是带不动、说透彻点就是懒,懒得搭也懒得写,今日深刻意识到错误,做学问是不能懒的,会被人喷的&#…

mysql update实质,UPDATE注射(mysql+php)的两个模式

UPDATE注射(mysqlphp)的两个模式2021-01-23 7:48:35424UPDATE注射(mysqlphp)的两个模式文/安全天使SuperHei2005.8.11一.测试环境:OS:Windowsxpsp2php:php4.3.10(mysql4.1.9apache1.3.33二.测试数据库结构:-----start-----数据库:test------------------…

数据库系统的特点

数据结构化数据的共享性高,冗余度低且易扩充数据独立性高数据由数据库管理系统统一管理和控制

SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到

导出 导出可以将资源表和子系统导出并形成一个json文件。 1.效果展示: 2.使用说明: 点击导出按钮后会弹出一个导出页面。页面的左侧可以选择功能,右侧可以选择资源表,选择功能的同时右侧中功能所需的资源表也会被选择。当功能之间…

基于物理的渲染-用真实的环境光照亮物体

目前,在游戏引擎中用于照亮物体的光源非常丰富。其中,比较常用的有:平行方向光、点光源、聚光灯以及体积光等,但它们都是对真实光源的近似,并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感&#…

php中取出数组中指定的值,PHP除开数组中指定的值

PHP去除数组中指定的值//一维数组简单的做法 unset($arr[array_search($value,$arr)])$arr array("a","b","c","d");function isHave($var){if($var!"b")return true;}$arr_filter array_values(array_filter($arr,"…

实体以及实体型和实体集

实体(Entity) 客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。 属性(Attribute) 实体所具有的某一特性称为属性。 一个实体可以由若干个属性来刻画。 实体型(Entity Type&#xf…

mysql中locat函数,MySQL中的LOCATE和POSITION函数使用方法 | 很文博客

不常用:MySQL中的LOCATE和POSITION函数LOCATE(substr,str)POSITION(substr IN str)返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0:mysql> SELECT LOCATE(bar, ‘foobarbar);-> 4mysql…

什么是数据的完整性约束

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

Python--协程(gevent模块)

一:前言 协程又称为微线程,纤程。英文名Coroutine:协程是一种用户态的轻量级线程 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复之前保存的寄存器上下文和…

ffmpeg 0.6.3 代码, 经过我努力,能够在vs 2005 下单步调试代码

1. ffmpeg-0.6.3_modify.7z 是修改后的ffmepg的代码; 2.ffmpeg-0.6.3_srouce.tar.bz2 是ffmpeg原始代码; 3.SDL-devel-1.2.15-VC.zip 是图像显示使用使用的sdl代码; 4.w_cc_p_10.1.020.exe 是vc 2005 需要使用的编译器&#xff1b…

克隆CentOS6虚拟机eth0被修改为eth1如何修改eth0

2019独角兽企业重金招聘Python工程师标准>>> 直接修改 /etc/sysconfig/network-script/ifcfg-eth0 删掉UUID HWADDR 配置静态地址 然后: rm -rf  /etc/udev/rules.d/70-persistent-net.rules然后reboot 转载于:https://my.oschina.net/hengbao666/blog/…

[Hnoi2013]消毒

Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a、b、c 均为正整数。为了实验的方便,它被划分为abc个单位立方体区域,每个单位立方体尺寸 为111。用(i,…

php按照文件名字排序,php readdir 排序问题,如何按照日期进行排序

目前是这么写的:function posts_get($directory,$ext){if (is_dir($directory)) {$handle opendir($directory);while ($file readdir($handle)){$subdir $directory . / .$file;if ($file ! . && $file !.. && is_dir($subdir)){posts_get($sub…

关系模型的名词

关系(Relation)一个关系对应通常说的一张表元组(Tuple)表中的一行即为一个元组属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名主码(Key)也称码键…

物理卷、卷组、逻辑卷

参考文章: 相关文献 谢谢作者分享!

fibonacci数列的题目——剑指Offer

https://www.nowcoder.net/practice/c6c7742f5ba7442aada113136ddea0c3?tpId13&tqId11160&tPage1&rp1&ru/ta/coding-interviews&qru/ta/coding-interviews/question-ranking 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出…

如何高效的编写与同步博客 (.NET Core 小工具实现)

系列目录 [如何高效的编写与同步博客(一)- 编写 ]如何高效的编写与同步博客(二)- 快速发布到多个渠道一.前言 写博客,可以带给我们很多好处,比如可以让我们结识更多志同道合的人;在写博客过程中…

java appendable,org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8

上传文件奇怪的错误2016-10-14 11:00:52,254 nuoshang.bluejay.common.shiro.cache.RedisCache.put(RedisCache.java:54) DEBUG - SET nameshiro-activeSessionCache key70qv5bejsihmgot7hroqg6q0lv2016-10-14 11:00:52,254 nuoshang.bluejay.common.shiro.cache.LCache.fire(L…