技术分享连载(六十九)
资源管理
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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。
技术分享连载(六十九)相关推荐
- DockOne微信分享(六十九):微服务选型之Modern Node.js
本文讲的是DockOne微信分享(六十九):微服务选型之Modern Node.js[编者的话]目前Node.js的发展非常快,大家可能还停留在:Node.js性能很好,Node.js里都是回调,写起 ...
- 技术分享连载(十八)
图形渲染 Q1:我看到Unity 5.3.5版本中恢复了对粒子系统的合批功能,但是我尝试下来并没有达到这个效果.是粒子系统合批有什么要求吗,实例化会不会对粒子系统的合批造成影响呢? 经过我们验证,Un ...
- 信息系统项目管理师必背核心考点(六十九)访问控制授权方案
科科过为您带来软考信息系统项目管理师核心重点考点(六十九)访问控制授权方案,内含思维导图+真题 [信息系统项目管理师核心考点]访问控制授权方案 一.自主访问控制(DAC) 1.指明用户能够访问哪些资源 ...
- UWA 技术分享连载 转载
技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...
- 陈艾盐:《春燕》百集访谈节目第六十九集
<春燕>访谈节目共120集,每月分10集播出,记录了上百位企业家对"慈善"的各种不同见解,通过讲述社会真善美的故事,让更多的人了解慈善.发扬慈善精神,构建更加美好,和谐 ...
- DockOne微信分享(六十四):基于Docker实现DevOps的一些探索
本文讲的是DockOne微信分享(六十四):基于Docker实现DevOps的一些探索[编者的话]本次分享从DevOps介绍:Docker介绍:基于Docker实现DevOps的优势:Docker化D ...
- 如何选择适合你的兴趣爱好(六十九),网球
围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第六十九讲--网球.近几年我国的网球爱好者越来越多,特别是在李娜大满贯两度折桂后,很多人对网球的运动热情被带动起来 ...
- JavaScript学习(六十九)—正则表达式实训题
JavaScript学习(六十九)-正则表达式实训题 复习一下所学的知识 实训练习
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
- 第六十九章 Caché 函数大全 $WCHAR 函数
文章目录 第六十九章 Caché 函数大全 $WCHAR 函数 大纲 参数 描述 第六十九章 Caché 函数大全 $WCHAR 函数 返回与识别代理项对的数字代码对应的字符. 大纲 $WCHAR(e ...
最新文章
- cocos2d-js动作的连续
- 网页简单配置捉取网购信息
- 【综述】深度长尾学习
- WebService_Unity
- Windows10+GPU版 pytorch 安装
- 两个数组合成一个json对象_两个jsonarray合并
- java math 函数_Java中Math类常用函数总结
- 没有bug队——加贝——Python 45,46
- 求生之路2联机服务器没有响应,求生之路2联机卡,为什么求生之路2联机进不去...
- SchoolTool:先进的学院管理和信息系统
- 一道money计算题引发的思考
- 计算机组成第五章课后答案,计算机组成原理第五章答案
- python卡方检验kf_Python 卡方检验
- winform去掉laber背景色
- spring-boot只logback日志打印
- 【SQL】sql优化
- c语言反三角函数值域,反三角函数定义域和值域
- STM32学习记录:输入捕获应用
- ctf 抓捕赵德汉_2017网络空间安全技术大赛决赛周末开战 大家赶紧来看看之前线上赛的Writeup 抓捕赵德汉...
- 2022年熔化焊接与热切割考试试题及答案