资源管理

Q1: 在打包的时候,有一部分资源是没有设置AssetBundleName的,打包的时候会和依赖它们的资源打到同一个AssetBundle包里(Unity自动完成)。在资源加载的时候,无法主动获取到这些没有设置AssetBundleName的资源。GetAllAssetNames、LoadAllAssets这些接口的返回值中都没有这部分资源。
请问,在你们看来,这种情况是Unity的设计还是Bug?如果是如此设计的话,有什么特别的意义吗? 提供一个简单的情景,如下:
1)有A、B两个Prefab,其中A上挂个脚本引用了B
2)打包的时候,设置A的AssetBundleName="prefab.unity3d",B的AssetBundleName=None
3)打包,只产生prefab.unity3d这一个AB包,其中包含了A、B两个资源
4)加载代码使用AssetBundle.LoadAllAssets(),返回的数组里只有一个资源(A)

我们刚刚在Unity 5.5.2版本上进行了一个测试,得到与题主一样的结论。

我们更加倾向于它是一种设计,而非Bug。因为Prefab B是作为一种参数被引用在A的脚本中,所以在AssetBundle中,它将以GameObject B的形式存在,但是不会存在于AssetBundle的映射表中。而对于题主的这种打包方式而言,AssetBundle的映射表中只会有一个,就是Prefab A。而AssetBundle.LoadAllAssets虽然会把GameObject A、B及其关联的资源全部加载,但其返回的Object[]内容应该就只有一个,也就是Prefab A。 所以,UWA推测,AssetBundle中在打包时是自己维护了一个map的,只有明确被设置ABName的资源才会被放入map中,也只有map中的资源才可以通过特定名称进行Load,而其关联的资源则会被打包到AssetBundle中的其他container中,是无法通过LoadAsset或LoadAllAssets API来获取到的。

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


性能

Q2:UGUI自动打包图集时,有时候同一个Tag会自己打出多个Group图集,导致DrawCall增加,有什么解决方法吗?这个分Group的原理是什么?

不少的项目都会遇到这个问题,即很多纹理打上了相同的Tag,但是却出现在了不同的Group中,类似下图,一个图集里包含了四个Group:

而产生Group的原因主要有两种:

1. 纹理的格式不同 。举例来说,有这样四张纹理格式分别为:RGB24,ETC1,RGBA32和ETC2,那么设置一样的Tag后,对应的图集就会有四个Group:



2. 纹理量太大。一个Group放不进,这个原因是容易理解的,就不解释了。

其中特别容易忽略的一点是,某些小纹理可能没有Alpha通道,导致了图集被分成两个Group,引起DrawCall的增高,这种情况下可以直接修改纹理,也可以强制设定为Aalpha通道的格式。

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


性能

Q3:Gfx.ProcessCommands包含哪些行为操作?据我了解,该行为是在RenderThread中,导致该行为耗时的主要原因是DrawCall。 那么除了DrawCall还有那些行为被记录到该过程中呢? 另外这过程耗时统计是否还包括顶点、材质贴图以及Shader等从内存到GPU的IO时间呢? 该问题限制在OpenGL ES 2.0/3.0驱动下思考,无需考虑Vulcan/Metal等目前面向多线程的驱动。

题主所列的这些行为应该是都在里面的。因为,即使是多线程渲染,图形API的调用也需要在同一个线程中。其一,是Android系统的EGLContext一般不是线程独共享的,也就是只有一个线程能向同一个EGLContext里面发送GL指令。其二,如果使用共享的EGLContext,多个线程都能提交图形API,渲染的结果很难保证正确性。比如:如何保证线程A绑定了VBO或者Texture之后,线程B提交DrawCall时一定是它需要的呢。综上所述,我们认为这些行为应该都在一个线程里面执行的。

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


性能

Q4:大家现在在工程里还是选择只使用 OpenGL ES 2.0吗?我记得以前大家都是这么做的,现在这个做法过时了吗?iOS 是否该加上 Metal?

我们目前都是用的Auto,主要有两个原因:

  • Metal测试下来CPU Overhead会比GLES低很多
  • GLES3能够有tex2Dlod支持 兼容性上来说只有实在老的机器和模拟器会fallback到GLES2,可能效果上会略差一些不过我们测试下来都可以接受。

感谢 UWA 问答社区的钱康来提供了以上回答。

我们现在快要上线的项目选的是ES3.0,iOS和Android都是选的这个,iOS选Metal的时候遇到模型显示不正常的问题,但是能力有限加上没时间没定位到原因,就统一成ES3.0了。选ES3.0还有一个原因,就是发现AssetBundle打出来的资源会比选Auto小很多。 还有就是目前我们的游戏偏重度,不指望用老手机的玩家会付费,所以放弃显卡太老的机型了。

感谢 UWA 问答社区的李先生提供了以上回答。

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


性能

Q5:Unity Profile性能检测中,请问Ref count什么情况下可以为空?

这说明当前fabao_suipian这个资源没有被任何脚本、资源所引用。如果之前该资源有引用,那么现在引用它的资源应该被销毁了。
比如,这个Texture之前可能被Material所引用,那么现在这个Material应该被UnloadAsset释放了。 再比如,这个资源是题主通过Resource.Load或AssetBundle.Load来加载的,然后将其缓存在一个变量中,那么当该变量被设置为null时,也会资源不再引用的情况。 所以,题主需要根据自己的情况来判断一下,这个资源是哪里加载的,具体想怎么使用。

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

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

  1. DockOne微信分享(六十九):微服务选型之Modern Node.js

    本文讲的是DockOne微信分享(六十九):微服务选型之Modern Node.js[编者的话]目前Node.js的发展非常快,大家可能还停留在:Node.js性能很好,Node.js里都是回调,写起 ...

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

    图形渲染 Q1:我看到Unity 5.3.5版本中恢复了对粒子系统的合批功能,但是我尝试下来并没有达到这个效果.是粒子系统合批有什么要求吗,实例化会不会对粒子系统的合批造成影响呢? 经过我们验证,Un ...

  3. 信息系统项目管理师必背核心考点(六十九)访问控制授权方案

    科科过为您带来软考信息系统项目管理师核心重点考点(六十九)访问控制授权方案,内含思维导图+真题 [信息系统项目管理师核心考点]访问控制授权方案 一.自主访问控制(DAC) 1.指明用户能够访问哪些资源 ...

  4. UWA 技术分享连载 转载

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

  5. 陈艾盐:《春燕》百集访谈节目第六十九集

    <春燕>访谈节目共120集,每月分10集播出,记录了上百位企业家对"慈善"的各种不同见解,通过讲述社会真善美的故事,让更多的人了解慈善.发扬慈善精神,构建更加美好,和谐 ...

  6. DockOne微信分享(六十四):基于Docker实现DevOps的一些探索

    本文讲的是DockOne微信分享(六十四):基于Docker实现DevOps的一些探索[编者的话]本次分享从DevOps介绍:Docker介绍:基于Docker实现DevOps的优势:Docker化D ...

  7. 如何选择适合你的兴趣爱好(六十九),网球

    围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第六十九讲--网球.近几年我国的网球爱好者越来越多,特别是在李娜大满贯两度折桂后,很多人对网球的运动热情被带动起来 ...

  8. JavaScript学习(六十九)—正则表达式实训题

    JavaScript学习(六十九)-正则表达式实训题 复习一下所学的知识 实训练习

  9. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  10. 第六十九章 Caché 函数大全 $WCHAR 函数

    文章目录 第六十九章 Caché 函数大全 $WCHAR 函数 大纲 参数 描述 第六十九章 Caché 函数大全 $WCHAR 函数 返回与识别代理项对的数字代码对应的字符. 大纲 $WCHAR(e ...

最新文章

  1. cocos2d-js动作的连续
  2. 网页简单配置捉取网购信息
  3. 【综述】深度长尾学习
  4. WebService_Unity
  5. Windows10+GPU版 pytorch 安装
  6. 两个数组合成一个json对象_两个jsonarray合并
  7. java math 函数_Java中Math类常用函数总结
  8. 没有bug队——加贝——Python 45,46
  9. 求生之路2联机服务器没有响应,求生之路2联机卡,为什么求生之路2联机进不去...
  10. SchoolTool:先进的学院管理和信息系统
  11. 一道money计算题引发的思考
  12. 计算机组成第五章课后答案,计算机组成原理第五章答案
  13. python卡方检验kf_Python 卡方检验
  14. winform去掉laber背景色
  15. spring-boot只logback日志打印
  16. 【SQL】sql优化
  17. c语言反三角函数值域,反三角函数定义域和值域
  18. STM32学习记录:输入捕获应用
  19. ctf 抓捕赵德汉_2017网络空间安全技术大赛决赛周末开战 大家赶紧来看看之前线上赛的Writeup 抓捕赵德汉...
  20. 2022年熔化焊接与热切割考试试题及答案

热门文章

  1. 基于机器视觉的缺陷检测汽车零部件
  2. 人工智能基础-向量的基本几何意义
  3. 机器学习常用激活函数
  4. 干货回顾丨深度学习应用大盘点
  5. 干货回顾丨TensorFlow四种Cross Entropy算法的实现和应用
  6. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架
  7. 《数学之美》第16章 信息指纹及其应用
  8. (正确姿势)centos7 如何从U盘拷贝文件
  9. 《Nature》挑战进化DNA突变理论!
  10. 量子物理学家:如果宇宙中所有物体突然消失,会剩下一个「空宇宙」吗?