技术分享连载1

Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制?

Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Update方法及其同类空方法,不知道是否还有其他因素?

Q3:在Unity的内存管理机制中, Reserved Total 和 Used Total之间的关系是怎样的?

Q4:纹理Atlas是建议合成一张2048(尺寸)的纹理还是四张1024的纹理?

Q5:在把Unity升级到5.3之后,项目中缓存的粒子特效无法正常播放了(只能播放一次),是否还需要修改粒子的设置呢?

技术分享连载2

Q1:Lightmap在PC上显示正常,但是转到Android平台上存在色差,颜色普遍偏暗。

Q2:Lightmap丢失。用Unity5.1.2的AssetBundle做热更新,资源导出的时候分析了所有的依赖项单文件导出。比如在导出场景的时候场景的烘焙出来的LightmapSnapshot.asset文件导出不了,导致运行的时候场景的Lightmap丢失了。

Q3:Unity 5.3版本WWW有泄漏,用Unity的Profiler看不出来内存的变化,但用Android或者iOS的内存查看工具就能发现内存在一直增加。之前同样的步骤测试5.2.3版本就没问题。 如图:

Q4:如果我有一个Prefab,它的Dependencies都在Resources文件夹中,那么,当我在AssetBundle打包时,只打包这个Prefab(不指定BuildAssetBundleOptions.CompleteAssets和BuildAssetBundleOptionsCollectDependencies)的话,这个Prefab能够正确实例化吗?

Q5:假设有两个界面Panel A和Panel B,它们均依赖一个共享Atlas C。AssetBundle打包时,如果我们将其分别打包的话,那么在使用时是否不能将AssetBundle C进行卸载?如果在加载Panel A和B之前,将Atlas C加载到内存中,但是将AssetBundle C进行卸载,那么在加载和实例化Panel A和B时,是否会出问题?

技术分享连载3

Q1:如图,在Editor中查看Profiler里的内存详细信息,发现Used Total中有个“Unity”,请问是什么意思?为什么会特别大?

Q2: 在进行内存优化时,Unity Profiler给出的数据和Android系统(adb dumpsys meminfo,已经考虑memtrack的影响 )的数据差距较大(已经分析了Profiler自身的内存占用),如何分析这部分差异,比如包括对显存消耗进行准确统计,OS消耗的统计等等?

Q3:iOS上PVRTC不支持NPOT的贴图压缩,在Android上可以用ETC2,但在iOS上不能压缩,内存消耗大。请问在iOS上有没有好的处理方案?

Q4:怎样动态加载Navmesh?

Q5:当关闭预渲染GI时会出现IndirectResolution,这个参数有什么用,为什么调大了以后会大大增加渲染时间,但是烘培出来却没有什么效果。

技术分享连载4

Q1:System.ExecutableAndDlls占内存巨大,且一直在增长,这个属于正常情况吗?

Q2:已经预加载怪物,然后显示怪物 PSS上升,并且在隐藏怪物后并没有下降,这是什么原因导致?显存上去了吗?

Q3:我们在美术制作时做了40根骨骼,但在动作中仅用到了其中的30根。这种做法和30根骨骼用到了30根相比,在蒙皮计算上会明显增加吗?(Animation经过了压缩处理)

Q4:Unity对Dynamic Batching的数量是否有限制?或者说对Saved by Batch的数量是否有限制?

Q5:不太明白Profiler中ManagedHeap.UsedSize是什么,以及这个参数的意义何在?是否重要?

技术分享连载5

Q1:能否在NGUI多分辨率适应方面提供一些解决方案或者思路?

Q2:请问Unity引擎中使用什么贴图压缩格式,可以保证在占用内存相对较小的情况下True Color效果和原图相当?同时在iOS和Android平台上图片的压缩格式分别用什么比较合适?有什么需要注意的地方吗?

Q3:在UWA的帮助下,我们追踪到了一个Reserved GFX的内存占用,并且显示比较高。我们应当如何降低该内存占用呢?

Q4:请问游戏中特效使用的很多贴图, 一般有什么好的方式去管理吗 ? 不合并图集的话会有上千张小的透明贴图, 合并图集又会有占用内存过多的问题。

Q5: 在Unity开发中,大规模使用粒子特效会有什么问题 ?如何去针对性的优化?

技术分享连载6

Q1:如果一个模型对应Skinned Mesh Renderer实例,那其所占的内存会随着角色增加而增长么 ?

Q2:在同一场景里烘培的Lightmap,我用了2张10241024的光照图,大小是5.3MB;别人用了3张10241024的图,大小是4.3MB。请问是什么影响这个光照图的大小,在哪里调?

Q3:NGUI变形,如下图走样了,请问是不是图片压缩导致的?

Q4:在游戏中,有些Mesh在编辑时候是接收Lightmap的,出于某些原因我们合并了相同的Mesh(材质也相同)。但是发现原先的Lightmap不再影响合并后的Mesh,请问怎么才能实现让合并后的Mesh也接收原先的Lightmap?

Q5:我们打出来的ipa包大概有220MB ,相同的资源APK包只有120MB左右, 相差100多MB 。我们查过网上其他已上市游戏的ipa,apk两个包,两个包体都只相差15~30MB,请问我们这种情况是否正常,有没有办法进一步压缩ipa安装包?

技术分享连载7

Q1:如下图,我们发现WaitingForJob这个函数消耗过高导致了卡顿,请问该卡顿是否由于渲染压力过大导致?

Q2:UWA的报告中指出我们所使用的刚体超出了限制,我们经过测试发现只要使用CharacterController就会产生一个隐藏的刚体。而我们的角色移动是会使用CharacterController的。 为了避免这种情况,我们使用了CapsuleCollider来替代CharacterController接受点击,同时使用设置位置的方法来替代CharacterController的move。

1. 请问这样做是否有风险,并且是否可以降低我们在刚体和物理系统方面的开销呢?

2. 同期我们观测到了一个以前没有关注过的警告。其内容为:
Static Collider.Move (Expensive Delayed cost),请问该报错是否与我们的调整相关?能够导致该警告的原因可能会有哪些呢?

Q3:我在shader里这么写的代码

o.texcoord1 = vec2(mod(v.texcoord.x,1.0),mod(v.texcoord.y,1.0));

但是报错 undeclared identifier 'mod' at line 106 (on d3d11),请问是什么原因导致的呢?

Q4:我们在查看《六龙争霸测评精讲》时,看到下图中的GC的调用,请问该数值的是取决于明式调用System.GC.Collect()这个方法吗,还是指系统自动GC的频率?

Q5:我们的游戏玩了20分钟后,Texture2D的内存涨到了60MB多,并且重复的资源很多,是否由于没有卸载完全?还是打包AssetBundle依赖性的问题?用的是UGUI。

Q6:如下图,我们在Unity 5.3.0中使用粒子系统时会触发一个ParticleSystem.Geometryjob的操作,并且该操作十分消耗CPU,请问怎么解决?

Q7:如下图:我在Profiler中看到这些没有引用的资源,他们是否还在内存中?

技术分享连载8

Q1:在报告中我们看到函数uwa-xxx是我们加的自定义代码段采样, 我们发现它们触发了很多GC, 是什么情况呢?

Q2:下图一是刚进游戏时获取的信息,第二张是开关几次同一个UI界面后获取,对比两图我们发现有多份重复的Texture。请问这是为什么?我们的加载方式是UI通过AssetBundle加载,加载后会释放AssetBundle,然后再次加载 UI 就会造成纹理资源的冗余。

Q3:我们在UWA报告中看到有拼合粒子系统和未拼合粒子系统,请问如何拼合粒子系统?有没有什么规则呢?

Q4:项目中勾选Static Batching和不勾选对效率有多大影响?我们在使用中发现勾选了以后包大小会增大一倍。如果不勾选,和自己在代码中调用StaticBatchingUtility.Combine的效率有多大区别?

Q5:我们在Profiler中发现了一个AssetDatabase的内存占用,其存在于Assets中,单个占用内存非常大。 请问该占用是如何发生的呢?是否可以避免?

技术分享连载9

技术分享连载10

Q1:在使用NGUI时,我们通常会将很多小图打成一个大的图集,以优化内存和Draw Call。而在UGUI时代,UI所使用的Image必须是Sprite;Unity提供了SpritePacker。 它的工作流程和UGUI Atlas Paker有较大的差别。在Unity Asset中,我们压根看不到图集的存在。 问题是:
1. SpritePacker大概的工作机制是什么样的?

2. 如果Sprite没有打包成AssetBundle,直接在GameObject上引用,那么在Build时Unity会将分散的Sprite拼接在一起么?如果没有拼接,那SpritePacker是不是只会优化Draw Call,内存占用上和不用SpritePacker的分离图效果一样?

3. 如果将Sprite打成AssetBundle,AssetBundle中的资源是分散的Sprite吗?如果不是,不同的AssetBundle中引用了两张Sprite,这两张Sprite恰好用SpritePacker拼在了一起,是不是就会存在两份拼接的Sprite集?

4. 如果想使用NGUI Atlas Packer的工作流程,改如何去实现?

Q2:同样的App,安装在不同的机型上,使用同样的自动化脚本进行自动化测试,App的内存消耗(ADB Dumpsys Meminfo)在不同的机型上结果迥异,有些机型只有200MB多的内存消耗,有些机型高达600MB。我们已经分析过OpenGL ES 2.0和OpenGL ES 3.0对ETC2贴图解压的影响。200MB左右的机型有些是ES2.0,600MB消耗的机型有些是ES3.0的,并且多次测试可重现。请问你们如何分析这个问题?是否有标准来确定游戏真正的内存消耗?

Q3:首先用户或者产品只关心整体消耗,并不会以Profiler为准,内存不足的崩溃也不会以Profiler正常而消失。其次,我们降低Profiler统计的消耗后,OS的消耗也会大大降低,甚至下降的更多。我们据此判断:这两个数字不一样,但应该是有联系的。我们想知道联系是什么?

Q4:当关闭预渲染GI时会出现IndirectResolution,这个参数有什么用,为什么调大了以后会大大增加渲染时间,但是烘培出来没有啥效果。

Q5:如何在移动设备上,对Bloom和全屏抗锯齿进行优化?Unity标准资源里面自带的效率比较低(已经尝试过Bloom(Optimized))。

技术分享连载11

Q1:正常情况下游戏如果一直玩下去,Mono是不是会一直增加? 比如频繁打开一个界面,界面里有脚本会不断创建一些东西 ,那么Mono是否会不断增加?对性能上会不会造成影响呢?

Q2:关于抗锯齿和BLOOM,有什么好的优化方案或者优秀插件推荐?

Q3:我们在编译安卓版本时,在某些设备上(Sony L36h,小米4)调试时,发现有一个时间消耗项叫Graphics.PresentAndSync,该函数对性能的消耗会特别夸张(渲染20毫秒,这个能达到50毫秒)。查了相关文档,发现该函数好像和安卓设备的垂直同步有关,但是大部分安卓设备的垂直同步是不可以关闭的。请问有什么好的办法解决吗?

Q4:我们使用UGUI,Sprite一般都选择默认的格式了,Compressed,但是在iOS设备下就会糊,用TrueColor就很大,请问一般该如何处理呢?

Q5:我们这种英雄UI,里面嵌了一个类似场景的Prefab,开了实时光照之后内存就特别高。这种不属于场景,又没有办法烘培,有没有什么好的建议呢?

技术分享连载12

Q1:下图是UWA性能检测报告,图中标红的这两个函数常常导致很高的堆内存分配,那么我该如何检查或者避免呢?

Q2:如果脚本引用了GameObject,那转换场景的时候脚本和GameObject都没了,还会产生堆内存的吗?

Q3:在Unity 4.x的版本中,所有UI贴图使用ETC2格式,即使目标设备不支持该格式,也会解压成RGBA32使用。 而在目前使用的Unity 5.3.4版本中,iOS平台无法设置ETC2格式。如果压缩只能使用PVRTC格式,那么PVRTC存在显示效果比较差,并且图片必须为正方形,但如果用RGBA32格式,贴图占用的内存和存储又都过大,请问目前版本的Unity在iOS平台上应该如何设置UI贴图的压缩格式?

Q4:UWA性能检测报告中的Shared UI Mesh表示什么呢?

Q5:勾选了“Optimize GameObject”这个选项后,虽然性能优化了,可骨骼的TransForm会消失,有些需求又是需要在某个骨骼的TransForm上面挂特效的,这种情况下有什么比较好的处理方案吗?

技术分享连载13

Q1: 请问粒子特效的Shader是否不能使用依赖打包? 我们对Shader的模型和特效使用了依赖打包,运行的时候发现模型显示是正常的,但是粒子特效使用的Shader就不能正常运行,特效显示不正常。而在编辑器中,我们看到Material中的Shader是存在的。这时候如果重新手动给这个Material指定同样的Shader,这个粒子特效就能正常显示,请问这是什么原因引起的?

Q2:如图,我们在UI打开或者移动到某处的时候经常会观测到CPU上的冲激,经过进一步观察发现是因为Instantiate产生了大量的GC。想请问下Instantiate是否应该产生GC呢?我们能否通过资源制作上的调整来避免这样的GC呢?如下图,因为一次性产生若干MB的GC在直观感受上还是很可观的。

Q3: iOS平台需要对图集做RGB和Alpha通道的分离吗?我发现在同样大小的图片(正方形),RGB Compressed PVRTC 4bits和RGBA Compressed PVRTC 4bits两种格式,占用内存是一样的,如果把一张图片分成两张,那么在iOS平台是不是占用内存多一倍?有透明通道的,对于它的图集怎么处理会更好一点?

Q4: 关于场景中玩家和NPC名字的DrawCall的问题。我们项目中是使用TextMesh挂到场景单位上,但是这样每个名字就占了一个DrawCall,请问有没有好的办法优化呢?

Q5: 我们能通过Batching来进行效能方面的优化吗?透过粒子发射出来的半透明模型片是无法Saved by Batching ,如果粒子可以使用Dynamic Batching的话,想请教具体的使用规则与方法。

技术分享连载14

Q1:能否对提升NGUI的渲染效率提供一些思路?

Q2:如下图所示,第一张显示的是没有烘培Lightmap的场景效果,里面有一盏点光源;第二张显示的是烘培Lightmap后的场景效果。请问为什么同一盏点光源照亮的效果差别那么大?

Q3:在UWA给出的报告中,我们发现了Animator过高的情况,其中UI和角色各占一半。我们之前一直选择CullUpdateTransforms,通过阅读Unity官方文档发现CullCompletely更符合我们的现状,想请教下如果我们选择CullCompletely可能会有什么隐患呢?

Q4:我有一个UI预设,它使用了一个图集, 我在打包的时候把图集和UI一起打成了AssetBundle。我在加载生成了GameObject后立刻卸载了AssetBundle对象, 但是当我后面再销毁GameObject的时候发现图集依然存在,这是什么情况呢?

Q5:我们现在有一个场景,Draw Call和面数都在正常范围内,Camera的距离也和其他场景一样,但是VBO却非常高。下图是该场景的数据情况,该场景下有很多复用的模型,如果不勾选Static那VBO会下降,但是Draw Call会上升。那我能否通过合并模型的方式把VBO降下来呢?

技术分享连载15

Q1:以前端游时代,材质根据Pass不同、光照环境不同可以离线预编译成ShaderCache,运行时并不需要拼材质再实时编译,只要加载二进制代码就好了。那Unity有没有做这件事呢?我们是根据平台和环境预编译的Shader。

Q2:相同效果前提下,就性能而言,Shader 是用 V&F 还是Surface好?

Q3:Lightmap在Baked GI的等待时间比较长(Realtime GI已关闭),想请教有没有什么建议的参数或是方式,可以缩短等待的时间?

Q4:Prefab中的GameObject的tag设置为EditorOnly仍然会被打进Resoures包吗?有其它EditorOnly方案吗?

Q5:对于Handheld.PlayFullScreenMovie 这个Unity播放开场动画的API,会有内存问题吗?比如我的mp4动画有20MB,那么这个动画会撑高mono堆内存吗?

技术分享连载16

Q1:请教,角色分部件换装可行吗?比如衣服裤子分开,都是用Skinned Mesh Render,有没有办法合并降低Draw Call?

Q2:打包时候AssetBundle的md5总变化(被打包的东西没变),请问能怎么解决?有说法是加上DeterministicAssetBundle就可以,但是我尝试后发现md5依然变化。

Q3:我用的是UGUI Canvas,Unity 5.3.4版本,请问如何查看每次Rebuild Batch影响的顶点数, Memory Profiler是个办法但是不好定位。

Q4:通过移动位置来隐藏UI界面,会使得被隐藏的UIPanel继续执行更新(LateUpdate有持续开销),那么如果打开的界面比较多,CPU的持续开销是否就会超过一次SetActive所带来的开销?

Q5:游戏中出现UI界面重叠,该怎么处理较好?比如当前有一个全屏显示的UI界面,点其中一个按钮会再起一个全屏界面,并把第一个UI界面盖住。我现在的做法是把被覆盖的界面 SetActive(False),但发现后续 SetActive(True) 的时候会有 GC.Alloc 产生。这种情况下,希望既降低 Batches 又降低 GC Alloc 的话,有什么推荐的方案吗?

技术分享连载17

Q1:请问内置的shader怎么打包?我用到了内置材质球,不只是Shader,这时候在Profiler中看到加载的结果中会出现多份,如下图所示:

Q2:我在Profiler中看到 GC.MarkDependencies 的CPU消耗有900ms+, 虽然在退出战斗的时候调用了Resources.UnloadUnusedAssets(); 可是卡顿还是很明显,请问有什么推荐的方案吗?

Q3:在UI界面中,用Canvas还是用RectTransform做根节点更好?哪种方法效率更高?

Q4:用Resources.UnloadAsset 释放未Instance的Object 会出现这样的错误 :Unload Assets may only be used on individual assets and can not be used on GameObject's/Components or AssetBundles.请问该如何解决?

Q5:我现在动态加载StreamingAssets下的贴图,代码如下:
我发现这种方式内存消耗很大,一张512 x 512的贴图占用了2MB,看官方的解析是内存和显存各需一份。想了解下动态加载贴图有什么推荐的方式吗?

技术分享连载18

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

Q2:我用的是Resource的加载方式,并且已经预加载好了材质所在的Prefab ,但是为什么在第一次显示材质的时候还要Load这个材质?

Q3:我们的游戏使用 Spine 插件,因为要用到裁切动画,所以修改了Shader,但在使用的时候出现异常: Shader wants normals, but the mesh Skeleton Mesh doesn't have them,可能是什么原因?

Q4:我在第一次执行GameObject.Instantiate一些资源的时候会卡(当时加载当时就实例的情况),有的复杂资源甚至在第一次GameObject.Instantiate的时候会卡70多毫秒,造成明显的卡顿,请问有什么好的解决方案吗?

Q5:同一个纹理,有多个Prefab生成的实例,会有多份这个纹理的copy吗?

技术分享连载19

Q1:我项目的UnityShaderCache目录下有300个文件(如下),且不是一次生成, 而是随着游戏进行而产生的。为了在游戏第一次进行时把所有Shader都编译来减少卡顿,我把用到的Shader加入到 Always Included Shaders中, 并在游戏开始时调用了 Shader.WarmupAllShaders,也尝试把Shader打个包一起加载出来 ,然后Shader.WarmupAllShaders,但是效果并不理想。有什么好的解决方案吗?

另一个困惑:已加到 Always Included Shaders 中的。 还需要再加载一次么?

Q2:某个Shader里设置了Culling Off,会影响到后面所有Shader的渲染状态么(假设后面不再设置Culling)?

Q3:StreamingAssetPath 和 PersistantDataPath下可以不Load AssetBundle ,直接放资源Load吗?

Q4:项目在发布时,Player Setting中勾选的这个选项,对于已经打包并且放到了Streaming Assets中的AssetBundle文件有效果吗?模型资源里有个选项,是否能达到同样的效果?

Q5:我们的动画是放在FBX文件里的(如下图)
这样做导致打包的时候把一些无用的文件也打进AssetBundle包里了,实际上我们只想使用最后这个动画文件。但在编辑器里选中FBX文件里的动画文件时却没有AssetLabels这个窗口,设置不了AssetBundle Name。
是不是只能用代码设置?还是意味着不能设置AssetBundle Name,只能把动画文件提取出来,类似下图这样单独的一个文件?

技术分享连载20

Q1:我想要在Editor下批量地对Animator Controller文件中每一个的State里的Animation Clip进行替换,但好像没有看到 Unity引擎有提供类似的API,只提供了能在Runtime时进行替换的方法,类似下图:

我现在想要达到的目地是在Editor下写一个批量替换Animation Clip的插件,请问下Unity引擎是否有提供这样的接口呢?

Q2:我用UGUI做的一个界面中有一个背景图片,游戏中没有做任何处理,关闭销毁这个界面后这个图片还在内存中,但是我已经调用过了Resources.UnloadUnusedAssets,如下图所示。我的预设没有打成AssetBundle,是放在Resource路径加载的。请问是什么原因导致的呢?

Q3:同样的包同一个图集,ETC2格式,在红米Note1上会比酷派的内存会大四倍,请问这是什么原因造成的?如果不支持OpenGL 3.0,会造成这么大的影响吗?

Q4:MeshBaker 烘焙的Mesh可以保存到Prefab中,但是不能像FBX一样,设置Model导入设置中的Generate Lightmap UVs 等信息,请问有没有大招可以处理此情况?

Q5:如果我的Animator是直接引用了FBX里的动画文件,而不是复制了FBX的动画文件出来再引用,那么打包的时候会把FBX都打包吗?

技术分享连载21

技术分享连载22

Q1:StaticBatchingUtility.Combine会产生Combined Mesh的内存,如何手动删除这部分内存?

Q2:Unity 5.x 能把指定集合的Mesh烘焙到一张Lightmap里吗?

Q3:我们现在采取了2种资源管理方式, 我想了解下内存占用问题。 方式A:AssetBundle加载好以后在内存中保留, 如果需要创建对象就通过Instantiate来创建。方式B:AssetBundle加载好以后立刻通过Instantiate实例化一个对象, 然后Unload(false)这个AssetBundle,如果需要,创建对象通过clone来完成。对于方式A,在Profiler中发现 WebStream中有相关AssetBundle文件存在, 我们认为这份内存是多余的, 所以就采取了方式B, 方式B又面临资源卸载不干净的情况。想确认一个问题, 如果采取方式A: 一个 xxx.assetBundle原始文件大小是 1MB, 解压到Webstream内存中是2MB, 最终实际内存占用是2MB 还是3MB 呢?

Q4:请问一下,我两个预设都引用了第三个AssetBundle的贴图,如果不希望这张贴图存在两份,一定要等这两个预设都加载好了,才能卸载贴图的AssetBundle吗 ?

Q5: 关于Loading.ReadObject耗费比较高,有什么推荐的方法吗?

技术分享连载23

Q1:请问音频中的 Quality 什么意思?一般设置为多少合适?我拖进去一首歌曲,试了一下 在0 和 100 的情况下区别不大,但是生成的音频文件大小差别很大。

Q2: 我做的预设用到了这个字体

我将这个预设打成AssetBundle包,通过Profiler分析时发现占了两份内存。

下面这个SIMHEI应该是那个TTF的,为什么会占两份内存呢?

Q3: 我在Profiler中看到GameObject.Deactivate耗时较大,请问该如何优化?

Q4: 我有一个特效依赖了两个FBX。我把这两个FBX的这个勾选去掉,Editor运行正常。

Q5: 我用内建的Shader渲染场景,深度图里有内容。而用自己的Shader,取到的深度图什么都没有,都是1,什么原因导致的呢?我已经打开ZWrite了。

技术分享连载24

Q1:字体作为多个资源的依赖包,会在游戏中被加载多次。我们现在有个问题,AssetBundle A资源依赖于这个字体,加载A的时候加载了一份字体,然后B资源也依赖这字体,而后加载B的时候我们没有去重复加载字体,这时候发现B资源上出现了字体丢失的现象。

请问加载资源的时候,Unity会自动去识别内存里是否有它的资源依赖包吗?如果有的话,为什么B加载的时候找不到已经存在内存中的字体?这里需要手动去做些什么处理吗?

同时我发现依赖包资源如果进行了bundle.m_AssetBundle.Unload(false)以后,其他依赖于这个包的资源就引用不到了。我们流程上对于每个读进来的AssetBundle,都会加载完后马上进行Unload(false),请问如果是依赖包的话,是不是不能对其进行这步操作?

Q2: 我在用Profiler真机查看iPhone App时,发现第一次打开某些UI时,Font.CacheFontForText占用时间超过2s,这块主要是由什么影响的?若iPhone5在这个接口消耗2s多,是不是问题很大?这个消耗和已经生成的RenderTexture的大小有关吗?

Q3:SkinnedMeshRenderer.BakeMesh这个函数一般是什么时候调用呢?在Instantiate后调用么?

Q4:我用Profiler.BeginSample统计到的数据与直接看Memory下的不一样,前者比后者的数据更大,这是为何? 用Profiler的API获取到的这一帧的内存消耗是85.6MB,而堆内存中显示的是62.9MB,这怎么理解?

Profiler.BeginSample

Profiler中数据

Q5:将Shader独立打包,如果我在启动游戏的时候加载一次,那么之后切换场景是不是就不用每次都加载了?

技术分享连载25

Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了。而且我把图片都打成了Bundle,然后读取出来,图片的大小应该是超过了这个SerializedFile的大小的?

Q2:我游戏里重复的特效较多,有些只是图案相同但改变了颜色参数,如果都打成独立AssetBundle,则内存里面会有多份Texture。关于这样的打包一般有什么推荐的方法呢?

Q3:我发现ScrollRect里有大量元素,在拖动的时候触发了很多onTransformChanged,能否提供一些优化思路?

Q4:是否有办法用RenderTexture直接生成PVRTC或者ETC格式的Texture2D贴图?

Q5:有时候在Profiler中会碰到Static Collider.Move(Expensive delay cost),有什么办法可以优化掉呢?

技术分享连载26

Q1:我们游戏用的是TM4,4层Tilling贴图+1层融合贴图,发现手机发热现象严重,影响性能的表现,请问有什么标准或者参考数据吗?

Q2:我们通过AssetBundle预加载Shader后,并没有卸载AssetBundle,但是发现后面加载的Object并没有引用到正确的Shader,这可能是由于什么原因呢?

Q3:Shader.Parse 和 Shader.CreateGpuProgram 到底是做什么的?他们什么时候执行?

Q4:动静分离或者多Canvas带来性能提升的理论基础是什么呢?如果静态部分不变动,整个Canvas就不刷新了?

Q5:关于UI的Mask遮挡特效,能否提供一些解决思路呢?

技术分享连载27

技术分享连载28

Q1:在UWA性能报告中,你们建议我们选中Optimize GameObject来提升Mecanim动画模块的运行性能,但是这个功能会隐蔽角色骨骼,那么要挂载该骨骼上的这个点就无法查询了,有什么办法可以解决这个问题吗?

Q2: 我在Profiler中看到Other下System.ExecutableAndDlls的内存很大,请问这个是什么东西,对我们游戏的性能影响很大吗?

Q3:我们发现材质实例数量特别多,想问下这个对性能的影响如何,有没有什么建议?

Q4:现在Unity还不能将场景和 NavMesh数据或者Lightmap数据分离,是吗?我是想先加载一个干净的场景,然后再动态切入不同的光照贴图和NavMesh网格数据,有什么办法吗?

Q5:判断怪物是否在相机视野范围有没有什么好方法?

技术分享连载29

Q1:我们现在为了美观,需要同时使用2套字体。但是每增加一套字体,就会内存增加50MB左右。请问你们在优化其他Unity游戏时,怎么处理类似情况的?

Q2:我在UWA测评报告中看到该项CPU耗时很高,请问这是什么引起的?可以优化掉吗?

Q3:请问这个Loading.UpdatePreloading是什么东西,为什么会突然那么高?一般情况下有没有什么优化的办法?

Q4:请问,Canvas里的东西移出了屏幕后,DrawCall没降低,那么它还会每帧去绘制吗?

Q5:我在UWA报告中看到大量的n/a资源,其格式的高度和宽度等信息都无法获取,并且存在大量重复,请问我该如何定位这些文件?能否优化解决呢?

技术分享连载30

技术分享连载31

技术分享连载32

Q1:切换场景时,卸载上一个场景总感觉耗时,请问大家是否有什么推荐的方案?

Q2: 我使用Shader.WarmupAllShaders操作,在后续加载资源还是有CreateGPUProgram出现。(Shader都在一个AssetBundle文件中,都是常驻内存的,不会删掉)是必须使用ShaderVariantCollection来加载Shader吗?

Q3: iOS上方形POT图片有时候会失真,请问这种情况如何避免?一张NPOT的图变换成POT,是否有推荐的方法? 采用 ToLarger 的模式拉成POT是否会有损失呢?

Q4: 多人同屏的时候,人物移动会使得头顶上的名字Mesh重组,从而导致较为严重的卡顿,请问一下是否有优化的办法?

Q5:AssetBundle在使用时解压出来的资源会占用一定的内存。我们现在想尝试使用两种加载方式:(1)在AssetBundle加载相关的资源后,将资源进行缓存,并卸载AssetBundle文件;(2)对AssetBundle文件进行缓存,以后用到相关资源后再进行直接进行加载。请问这两种方式你们推荐哪一种比较好?

技术分享连载33

Q1:在Unity 5.x版本下,我们在用UGUI的过程中发现它把图集都打进了包里,这样就不能自动更新了,请问图集怎么做自动更新呢?

Q2:图中的Material.SetPassFast占用很高,这是我在第一次实例化一个特效,但是第二次实例化就不会出现高值了,请问能怎么优化吗?

Q3: UWA建议“尽可能将静态UI元素和频繁变化的动态UI元素分开,存放于不同的Panel下。同时,对于不同频率的动态元素也建议存放于不同的Panel中。”那么请问,如果把特效放在Panel里面,需要把特效拆到动态的里面吗?

Q4:Draw Call和Setpass Call,这两个指标主要是看哪一个?关于这点众说纷纭,很多地方都是说看SetPass Call,但是在UWA的性能测试中,还是把Draw Call当成唯一指标。

Q5:我看到UICamera.Update()的GC调用特别高,只要我一移动就会产生2.8K的GC,看起来是NGUITools.FindInParents这个方法导致的,有没有什么可以优化的方法呢?

技术分享连载34

Q1:我用NGUI开发,因为角色名字导致重建,使得UIPanel.LateUpdate的CPU占用很高。如果将它们分离到多个UIPanel里,是否这个开销会相对小一些?

Q2:加载UI预制的时候,如果把特效放到预制里,会导致加载非常耗时。怎么优化这个加载时间呢?

Q3:能否就UGUI Batch提出一些建议呢?是否有一些Batch的规则?

Q4:ScrollRect在滚动的时候,会产生Canvas.SendwillRenderCanvases,有办法消除吗?

技术分享连载35

Q1:我在UWA上进行了性能检测,在资源内存这里看到详情如下。请问这个数量峰值大于1是不是就是有问题的?但一个Material是很可能被实例化多份的。实例化后对象释放掉,然后清理掉原始的Material,按道理就不算冗余吧?毕竟大部分都是材质在操作,对贴图资源应该没有影响。而且,如果确实有那么多角色同屏怎么办呢?

Q2: 对NGUI字体错乱有什么好的解决方案吗?

Q3:这个批渲染是什么?好像开销很高 。

Q4:我们测试发现,当Animator Controller挂载的动作比较多时,即使切换成另外一个动作很少的Animator Controller,任务的动作信息还是不会释放。我们将英雄打成一个AssetBundle,然后又把定制的Runtime Animator Controller加载替换进去,英雄自带的Runtime Animator Controller是挂了所有动作的。我们试了替换Runtime Animator Controller之后,把先前的Runtime Animator Controller Destroy掉,貌似内存也没释放。

Q5:请问这个GameObject.Active的开销怎么这么高?Activate会产生堆内存分配吗?

技术分享连载36

Q1:我在UGUI里更改了Image的Color属性,那么Canvas是否会重建?我只想借用它的Color做Animation里的变化量。

Q2:AssetBundle中资源同名但实际不同,请问会在UWA的资源检测报告中被认为是冗余的吗?

Q3:Unity自带的UI Shader处理颜色时,改 _Color属性不会触发顶点重建吗?

Q4:移动游戏场景中,相同的怪物会动态合并吗?如下设置可行吗?

Q5:EventSystem.Update()占用过高怎么优化?

技术分享连载37

Q1:打包AssetBundle的时候,我发现切换场景时,即使打同一个场景的AssetBundle,它们的Hash值都是不一样的,可能是什么原因造成的呢?

Q2:当UI关闭后,Texture图片却还留在内存,是下次垃圾回收或者Resources.UnloadUnusedAssets调用的时候就会清除吗?如果想立即清除,该如何操作?

Q3:我们的游戏中,不透明渲染在总体渲染里占比较高,主要的开销在于 MeshSkinning.Render 部分,这部分的Draw Call过高,共有65个, 请问该如何优化呢?

Q4:GameObject.Instantiate()每实例化一个GameObject到场景中,会造成卡顿,有什么办法可以优化吗?就算我采用了异步加载,仍然会有稍许的卡顿感。除了缓存池,是否还有别的方法?

Q5:预设中的变量,拖拽到Inspector面板和Transform.find这两种方法对加载影响是一样的吗?

技术分享连载38

Q:我有一个关于AssetBundle资源加密问题。CreateFromMemory这里不推荐大规模使用,那是不是我们要放弃对一部分资源的加密?还是说有其它的解决办法?

Q:我想确认一下Shader的依赖打包问题。如果采用了依赖打包,A、B、C依赖了D,当我更新了D包时,A、B、C是否都要重新打包?反过来呢?

Q:关于定位游戏中冗余资源引用的问题。UWA的报告中能定位到具体的引用代码么? 在Profiler只能看到ManagedStaticReferences但是具体不到引用的位置。比如Static ClassA引用一个ClassB,ClassB上引用了一个资源,就定位不出这个引用的过程。请问这种情况下有没有比较好的方法找到引用关系呢?

Q:UGUI的SrcollView Mask遮挡不住特效,这个有没有可行的解决方案?

Q:Spine动画在NGUI的ScrollView滚动区域的层级也会出现问题,请问怎么裁剪Spine动画呢,Spine是骨骼,这不就等于给特效换Shader了吗?

技术分享连载39

Q1:我们图标现在是制作成图集后再使用的,但是当图标数量很多的时候,图集的膨胀就很厉害了。对此我们的做法有两种:1)拆为多个图集;2)不再使用图集转而使用UITexture来使用。请问UWA有什么建议呢?

Q2:我发现当把UI挪到屏幕外时,Draw Call不会减少,只有设置Enabled去掉才能减少。UI是没有遮罩剔除这类功能吗? 那是否意味着ScrollRect只能自己做动态加载或者动态设置Enabled之类的优化了?

Q3:粒子系统的Prewarm主要用来做什么的,这个怎么优化呢?

Q4:UI展示动画时,使用Mask做和使用UI本身做 ,哪个效率会更高些?

Q5:我们为了降低像素填充就限制了最大分辨率,但是发现限制之后NGUI的字体显示就变得模糊了。是否可以避免NGUI字体模糊呢?下图是我们在小米5上测试得到的结果:低分辨率下文字就模糊了。

技术分享连载40

Q1:我们有了解到,卸载AssetBundle后, 从这个AB读出资源的Instance ID和guid的映射关系会被删除。在我们的项目中, 优化策略是这样的: 进场景时, 预加载Prefab,并创建一些对象实例缓存,然后会把AB删掉。因为我们发现在Android机器上, AB占的内存很大, 如果其中纹理(A)的Instance ID被认为失效,它和guid的映射没有了,如果某个时刻,缓存池不够用,需要从Prefab创建一个新的实例,这个Prefab会引用到A,资源管理器发现这个A的guid并没有对应的实例ID, 这时会导致重新从磁盘上加载资源A,请问这样理解对吗?

Q2:UWA的测评报告上说“蒙皮网格(Skinned Mesh)数量过高”,我们游戏内很多模型动画用的是这个,是美术还可以用其他的方式做动画吗?

Q3:能否推荐一些动画剧情的插件?

Q4:我在Profiler中看到Animator.Initialize这个耗时很大,这个有什么建议么?Animator.Instance 是因为Animator过多造成的吗?

Q5:请教一下,为什么NGUI的Atlas通过AssetBudle载入之后,使用Resources.UnloadUnusedAssets()不能够释放呢?分析器里面引用是1,但是又找不到哪里引用了。

技术分享连载41

Q1:Unity UI图集不是正方形,使用PVRTC格式的话,会出现问题么?比如是512x1024的原始比例。

Q2:在GPU分析器里面看到,同一个NGUI的图集被绘制了很多次。请问是否是由于各个界面Panel不一样导致的?这种情况下如何优化?

Q3:对于NGUI而言,如果界面元素的坐标是非整数的数值,会导致界面元素模糊么?还有哪些原因会造成界面元素模糊?

Q4:怎么去掉Mesh中的Colors属性?我把FBX里的LayerElementColor字段都删了,这个Colors还是存在。

Q5:同一个场景,烘了两套 Lightmap,切换的时候有没有办法在这两套Lightmap之间实现平滑过渡?

技术分享连载42

Q:请教一下,大家把UI做Alpha分离以后,会把分离前的图删掉吗?我这边把分离前的图删掉了,但是美术反映他们无法使用分离后的图了,因为在预览窗口看不了图。但是我又不想让他们用原来的图,否则还要花精力去维护。大家都是怎么处理的呢?

Q:在加载场景依赖的所有AssetBundle 后调用LoadLevelAsync,在LoadLevelAsync调用完成后, 对所有的AssetBundle调用unload(false),不知这样是否可行。主要想减少Webstream占有的内存。 现在有个问题,场景中的特效,在几次进入视野后会丢图。 场景景物是正确的,可能是什么原因导致的呢?

Q:公共AssetBundle太大会不会影响更新包的大小?这个公共包不unload会不会导致SerlizedFile太大,卸载的话会不会导致公共AssetBundle的Asset冗余?

Q:iOS下PVRTC格式对Alpha通道的支持不是很好,凡是有渐变的图集,失真都很严重。是否把Alpha分离出来,图片的品质就会有所提升? 但是内存会比PVRTC大一倍。

Q:请教一下,SerializedFile的卸载规则是什么呢?会跟随这AssetBundle一起卸载么?

技术分享连载43

Q1:有没有什么办法可以提升Unity编辑器中代码的编译速度?我们现在每修改一次代码,等待的编译时间都将近半分钟。

Q2:关于UI开发,NGUI和UGUI究竟哪个性能更好呢?

Q3:目前所遇到的问题是在UGUI下,无法使用ECT+Alpha分离,函数中已经设置了,但是实际打出来的包并不能显示。我们所使用的Unity版本为5.4.1f,所以特此请教一下是否哪些地方我们使用的不对。

Q4:下图中WWW.LoadFromCacheOrDownload第三个参数是用来验证资源的吗? 感觉跟第二个参数有点相似(除了验证以外), WWW.LoadFromCacheOrDownload在iOS上是否有数量限制?

Q5:WWW.LoadFromCacheOrDownload只是在内存中有个引用,没有实际加载资源,调用WWW.assetbundle后也是么? 那么依赖此AssetBundle的资源加载的时候,会自动触发此AssetBundle从磁盘加载对应的引用资源么?

技术分享连载44

Q1:我们在做依赖打包改进,比如UIAtlas这种脚本,AssetBundle包里脚本没有做依赖,每个包里都有这个脚本,会导致Mono堆内存增大么?对于“脚本也是资产”这一点理解的不是很透彻。脚本在AssetBundle里是不会启动,但是会出现脚本丢失。本身没有做依赖打包的话脚本是冗余在AssetBundle中吧?

Q2:我们正在权衡是否对纹理资源进行Alpha通道分离。现在发现,Android低端机上(OPENGL ES 2.0)使用Alpha分离,内存相当是两个ETC1的大小(相对RGBA32是小了很多),但是Shader中纹理采样会执行两次,这个采样其实对低端机消耗还是蛮大的吧?在iOS上分离是没有意义的,而且分离之后使用上会变麻烦,这样权衡之下,分离Alpha只是改善内存的话,优势看起来感觉不太明显,是否有更好的说法来说明分离的优势?

Q3:如果有一个AssetBundle A内容全是UI用的图片,另外一个AssetBundle B是一个UI的Prefab,在加载UI B的时候我为了节约加载时间,自己手动加载一下AssetBundle A,但是我发现UI B的加载速度并没有加快。所以想请教一下,当从AssetBundle里把这个Prefab GameObject拿出来的时候,它的初始化过程中是从哪儿读这些图片?

Q4:求教Mesh导入后这里的uv3和uv4是怎么回事?有的模型只有uv和uv2,有的有四套。

Q5: 在UWA上周六的分享会中,我收获了不少性能优化的知识点,同时也有个疑惑,是关于“UI Mesh重构”这个话题。当时UWA说“把一个UI界面移出屏幕或者缩放是不会引起UI Mesh的重构”,但是我今天测试了一下,在UISprite上面挂了一个脚本,让它移出相机屏幕或者手动更改坐标时,发现都会出现CPU峰值,看上去确实是Mesh重建造成的。下面是我的测试截图:

技术分享连载45

Q1:我从UWA的报告中看出我们的GC比较严重,里面有我们自己GC的地方(切换场景的时候),然后就是系统GC的。这个我们无法控制,那么有什么办法优化吗?我发现一个很尴尬的地方,如果我们不自己去GC,内存好像不会返回,但是GC又会引起卡顿。

Q2:场景切换完了后,我们发现上个场景的内容并没有卸载完毕,所以我们调用了Assetbundle.Unload(true)这个函数,紧接着我们调用了UnloadUnusedAssets+GC操作帮我们清理资源(如果不调用后续两个操作的话,我发现内存曲线并没有得到明显下降),而这个时候GC次数又高了,GC次数高了CPU降低,不去GC内存得不到完整释放。我在你们网站上看到说不要开发者频繁去使用UnloadUnusedAssets+GC这个操作,所以希望得到一些帮助。

Q3:我们没有使用AssestBundle的方式,使用的都是在Resources路径下的Load,请问Resources目录下的所有内容都会加载到内存里吗?如果里面东西多,是不是会导致占用内存过高?

Q4:请问下,Unity 5.3.3版本,Android用AssetBundle.LoadFromFile读取Application.streamingAssetsPath目录下的AssetBundle文件,用什么样的地址?

Q5:Font Texture 资源是如何生成的,因为我发现好像有重复的出现,如何优化呢?

技术分享连载46

Q1:我们用AssetBundle打包。A包里面有一个界面,C包里面也有一个界面,这两个界面用到了相同的图集,我把图集单独打成了B。游戏实例化的时候,我先加载B,然后加载A,然后手动LoadA里面的一个对象,实例化一个界面。然后释放A和B,后面当需要另外一个界面的时候,我又加载B,然后加载C,然后手动LoadC里面的一个对象,实例化一个界面。现在问题是,B里面的图集,我是不需要手动Load的,这个依赖关系是Untiy去做的,但是按照我之前的做法,B里面的图集会出现2份吗?

Q2:如下图,在UWA性能报告中,我们发现Camera.Render下CreateVBO的开销较高,请问这个是如何引起的?

Q3:FK & Statemachine 状态机占用时间比较高,是否有优化的方法呢?

Q4:伤害检测、还有靠近采集物品时触发可以采集的提示箭头等,我们都使用了碰撞,请问如果不使用碰撞,可以用什么方法代替呢?

Q5:Fixed Timestamp的大小设置多少合理,对物理的开销影响大么?

技术分享连载47

Q1:对Prefab资源的卸载、预览英雄模块、需要卸载英雄角色的资源、动画和材质都可以通过Resources.UnloadAsset(xxx)来顶点清除,而Prefab不行,Prefab 只能用 Destroy + Resouces.UnloadUnused()卸载吗?

Q2:如果我用WWW加载了一个AssetBundle,创建了一块WebStream内存。这时候我用另一个东西保存这个AssetBundle的引用,然后用WWW给Dispose了,那么这块WebStream内存会释放掉么?

Q3:NGUI的UIEventListener中的OnPress与UIButton的Press状态不能对应上。具体情况是我点击某个按钮并且按住不放,UIButton处于Press状态,然后移出了Button的范围,UIButton的状态变回了Normal,而UIEventListener中的OnPress并没有监听到,必须松开点击才能监听到。它们的Press状态切换有什么不一样呢?

Q4:关于UI的Image组件的Sprite剪裁显示问题。因为Image组件上面有ImageType为Filled的选项,通过这个东西可以实现对UI的各种奇妙的显示。因为Mask组件会造成大量的Batches,单独做图会造成算是冗余内存和包体开销,那写个自定义继承Image的组件把这个效果给实现了,按道理是没有问题的,而且在翻看UGUI源代码的时候,也找到了相关片段:

Q5:我发现如果不调用UnloadUnUsedAssets这个函数,则无法销毁通过Instantiate实例化出来的材质(包括纹理)。如果我尝试用Resouces.UnloadAsset来卸载挂在GameObject上的实例化材质, 则会闪退,请问这种情况该如何解决呢?

技术分享连载48

Q1:我有一个带位移动画A,有位置有旋转的变化,需要播完这个动画后切换到一个原地的动画B。现在我发现动画A没播放就会切换到B了,导致一些位移数据并没有作用到模型上,这种情况怎么处理?

Q2:关于GC优化,Unity官方文档中有如下两个推荐的方法,请问在手游上是否适用?(1)频繁GC,隔几秒主动调用一次,保证不需要的堆内存能够及时释放。适用于对内存总量较小的情况。(2)尽量避免GC,可以考虑先撑大内存。

Q:如下图所示,什么情况下会触发MaskableGraphic.Enable() ?现在我得到的结论是只要用到了Image组件,然后禁用启用带有这个组件的物体,都会触发进而产生GC。大家都怎么显示隐藏图片这种需求的,SetActive这种方式容易产生GC。

Q:UWA建议“将较多的动态UI元素分组放在不同的UI Panel中”,那么请问如果是ScrollView里面多个item的话,是否意味着每个Item都加一个Panel会更好一些?

Q:如果我在UIPanel下面放的是Sprite Renderer而不是NGUI的Sprite,是否会引起整个UIPanel的重绘?

技术分享连载49

Q1:常用资源类型网格、材质、贴图、动画都是引用或复制+引用的方式被使用,对于那些被引用的资源,需要等引用者不再引用了才能使用Resources.UnloadAsset吗?常用的资源几乎都是引用或引用+复制的关系,所以我对这个接口的理解是用处不大,请问大家是如何使用Resources.UnloadAsset这个接口呢?

Q2:请问UWA有什么办法可以快速定位到NGUI中是哪一个Panel在LateUpdate中触发了重建操作吗?

Q3:我的游戏运行一段时间之后,已经切换到一个空场景了,然后手动调用了System.GC.Collect(); Resources.UnloadUnusedAssets();为什么还是会有这么多贴图资源被引用呢。我猜可能是由于一些脚本中的静态变量引用导致,请问有办法查出来是哪些静态变量吗?

Q4:在UWA性能测评报告中,为什么同样分辨率、同样格式的纹理资源,其内存相差一倍?表格中Mipmap的数量是怎么计算的?

Q5:请教大神们个问题,美术在制作人物模型的骨骼动画时候,一般是没有必要缩放的,但是导出的动画文件里还有这部分信息。不知道是否有优化掉的必要。如果有,有什么好方法么?

技术分享连载50

Q1:在我的UWA性能检测报告中,纹理才占50MB,但为什么Unity内存会有300MB之多,请问这部分是怎么计算的?内存大小难道不是由资源大小决定的吗?

Q2:在Android平台上,PlayerSettings里开启/关闭Multithreaded Rendering,在性能和稳定性上有多大的区别? 一般是勾还是不勾?

Q3:物体的动态合批条件和是否是透明物体没什么关系吧?比如粒子系统的物体一般都是透明的,是不是也可以合批?

Q4:在UWA报告的渲染模块中,网格数和Draw Call数量都不高,但为什么不透明渲染消耗这么高呢?我该如何进一步定位并优化这个问题呢?

Q5:关于资源冗余,我从AssetBundle中加载一张贴图后,即使Unload(false),是否还会在内存中保留一个没有被任何资源引用的贴图呢?是否非得UnloadUnusedAssets()才能把这个“僵尸”资源给卸载掉?

技术分享连载51

Q1:我最近用Deep Profiler发现项目里有一个直接调用Color != Color的接口耗时很高,而且百分比也很高(不管是Self还是Total)。但是如果用Profiler.BeginSample显示时,其耗时又很低,百分比也很低几乎等于0。这样的情况下是Deep Profiler出问题了吗?

Q2:Unity中修改了Material的一个属性后,该Object就会单独实例化出一个Material,所以它就不能被动态Batching了,是这样吗?

Q3:对于UGUI文字花屏问题,有什么推荐的解决方法吗?

Q4:SkinnedMeshRenderer的Mesh是不是不能动态修改?属性里只开放了SharedMesh。

Q5:粒子系统里面使用到的模型,是不是读写开关必须要打开,否则会崩溃?

技术分享连载52

Q1:我们的游戏中有一些静止的建筑,会和整个场景一起烘焙(包括了每个建筑在地表的阴影)。现在希望这些建筑是逐步开放的,比如玩家1级的时候只有建筑A开放,2级的时候建筑B开放,现在的问题是当建筑未开放时(SetActive(false))地表的相关阴影还在。这种问题一般是怎么处理的?

Q2:在一个场景中有很多小物件,例如花花草草之类的静止物体,造成Draw Call数量较高。在不想让美术重新出资源的前提下,我是想把相同模型的东西合并,然后把小贴图打成一个大的贴图,重新算UV。还有比这种方法更好的优化手段吗?

Q3:对于Animators.DirtySceneObjects这个参数,它是和哪些因素有关,以及如何优化?

Q4:请问Physics.Processing的占用过大一般是因为什么原因导致的?

Q5:我游戏场景里有些草,勾选了Batching Static 如下图:

技术分享连载53

Q1:请问“Dynamic Batching”这个选项开关与否对于性能影响大么?

Q2:求教一个屏幕后处理的问题。我们期望角色不受屏幕后处理影响,所以目前采用双相机的方案,根据Layer划分,但是这种情况下角色的影子也就没有办法投影到地表上,请问这种需求有什么好的实现方式?

Q3:请教Lightmap相关的优化问题。我现在的场景中有N个GameObject共用一个Prefab,烘培Lightmap时,会生成出N个Lightmap贴图。有没有办法把这些生成的Lightmap合成一张?

Q4:我的项目在一帧中进行实例化操作时,会产生大量的GC Alloc,请问这是为什么?我又该如何避免呢?

Q5:请问UGUI的重绘是针对于拥有Canvas组件的Canvas物件,还是针对于拥有CanvasRenderer组件的Panel物件?

技术分享连载54

技术分享连载55

Q1:我把多个AssetBundle打成一个大包,会出现部分粒子特效贴图丢失的问题。参数设置为CollectDependencies | DeterministicAssetBundle | UncompressedAssetBundle时,贴图是对的,但是脚本、Shader又出错了。由于Unity 4.x下AssetBundle的问题比较多,想知道打大包可行性如何?

Q2:请问,反复对一个GameObject调用SetActive(true),是否会很耗性能?

Q3:如下图,通过纹理图片通过文件流形式加载到内存,
这样的资源还可以使用Resources.UnloadUnusedAssets()和Resources.UnloadAsset(m_Asset)进行资源卸载吗?

Q4:我们有些特效的动画开始是在相机外的 , 动作的裁剪使用的AnimationCullingType.BasedOnRenderers,这样会导致特效之后在相机内也显示不出来了,除了更改如下这个选项还有其他做法么?

Q5:发现一个可能是NGUI的Bug:在某些情况下UISprite不显示,或显示的位置不符合localPosition数值Bug。 如: 在UISprite.spriteName不变,对UISprite.gameObject.localPosition或UISprite.gameObject.SetActive设置新值时无效或显示不正确,请问是什么原因?相关例子已经提交给UWA。

技术分享连载56

Q1:我们的游戏中,相邻关卡资源很相似。现在涉及到切换场景,每次都要卸载资源又加载资源,很耗时;但是如果先加载再卸载,内存峰值又会涨。请问UWA有什么建议么?

Q2:在AssetBundle打包的时候,我们是一个文件一个AssetBundle,基本不存在冗余的情况了。但这种做法是否可取?UWA有什么建议?

Q3:BuildAssetBundleOptions.DisableWriteTypeTree这个选项的实际用处是什么?

Q4:网格模型FBX文件在不开启Read/Write选项时, 如果通过StaticBatchingUtility的CombineMesh来合批的话,内存会增加么?

Q5:我的项目在加载过程时经常崩溃,项目加载代码如下。想请问这种写法是否存在问题,是否会导致崩溃?

技术分享连载57

Q1:在整体的性能消耗上,CPU和GPU各占一半合理吗?如果不是,各占多少为好?还是说需要根据机型来看?其次,我如何知道游戏在手机上的GPU消耗?Profiler是看不到的,有工具推荐吗?

Q2:UWA DAY 2017中提到“Animator优化可以把精度从8位减到3位”是什么意思?如何实现呢?

Q3:我用DestroyImmediate 和 Resource.Unload 来进行卸载Prefab,在卸载前我获取Prefab下所有的材质,发现有些文件无法卸载,类似下图中的MangedStaticReferences(),怎么卸载这些资源呢?

Q4:我们项目做AssetBundle打包时,发现如果资源所依赖的C#Script的Public成员变量有变化时,用新代码加载旧的AssetBundle就会不兼容。有没有什么方法能判断这些Script在变化时是否需要重新打AssetBundle呢?目前我们使用.CS文件的MD5来判断是否需要重新打包,但其实这样应该有很多不必要的重复打包,对吗?

Q5:Unity的材质的宏是有材质用到时才会被编译吗?还是说不手动Skip都会编译?

技术分享连载58

Q1:我们项目中有大量的特效,一个特效Prefab可能包含100-200个GameObject,每个GameObject上都挂有一个粒子系统,但是实际上很多特效只有延时和坐标旋转之类的参数的区别。我看了Prefab文件后发现每个粒子系统分别记录了各自的信息,从而导致整体文件很大,内存占用也比较大。请问是否有优化的方法?

Q2:我们游戏中用到NGUI的HUD,单位主要是一个进度条和一个倒计时文本(持续更新),同屏数量达600左右,单位本身在持续移动。现已将这些设置为独立Panel,且只有2个DrawCall(进度条所在图集和文本),但还是卡顿得很厉害,请问是否有优化的方法?

Q3:如下图,请问这几个参数的单位是什么?

Q4:如下图,这个ResampleCurves选项的作用,以及是否和对内存性能的影响?

Q5:我们美术作的人物动画,是不需要用到缩放的,于是我做了一个Scale Curve剔除。对比运行时数据如下:

技术分享连载59

Q1:关于AssetBundle(下称“AB”)拆分粒度问题。在我的项目中,我是基于逻辑以及最终的打包大小来分的,比如尽量不让压缩后的AB包超过1MB, 这是UWA之前的推荐,同时也是因为当前版本Android包的SerializedFile占用大小所考虑。经过这样的规划之后,我打包这块的代码基本是写死的, 包括手动把公共包拆成多个(公共包略大,不拆的话压缩后会有6、7MB), 还有每个AB包的内容也是人为拆成多个。 这样虽然最后功能实现了,但个人依旧觉得不够自动化。每次新添加资源的时候, 都得走一遍这种手动流程。也研究了别人写的开源方案 ,全自动分析依赖关系,但问题是最后包打得实在太细了,不太符合科学(但还是推荐大家学习)。所以就想问下各位的公司项目是如何解决这个AB 粒度划分问题的?

Q2:我之前在参加UWA讲座时,听说移动端开启多线程,把后期效果移动到渲染线程会节省后期的消耗。我测试了一下,虽然主线程中后期显示的CPU占用降低了,但是却多了Gfx.WaitForPresent的时间,最后两者相加基本还是一样的。那开启多线程这个功能,对后期到底有没有帮助呢?

Q3:为什么Unity里实例化一个Prefab会产生那么多GC Allocated?

Q4:请问动画模块中,Animators.ProcessAnimationsJob和Animators.WriteJob的CPU占用较高,请问这些与什么因素有关?

技术分享连载60

Q1:对于WWW.LoadFromCacheOrDownload(System.String url, Int32 version)这个接口的第二个参数,我知道是做缓存资源的更新用的。我们之前在Editor模式下作了一个测试:用该函数加载一个资源,Version参数设置为1,会发现在缓存目录下生成了一个对应该资源的缓存目录,这很正常。然后我们再次用这个接口加载这个资源,Version参数设置为2,现会发在缓存目录下生成一个新的对应该资源的缓存目录,并没有覆盖旧的目录。这个情况在移动平台上是否也是这样的?

Q2:我听说WWW.LoadFromCacheOrDownload(System.String url, Int32 version)这个接口加载资源,如果是Unity 4.x的版本,会有500个资源的数量限制,如果超过这个限制,Unity会删除之前缓存的每个资源,是这样吗?那在Unity 5.x 版本上是否还存在这样的问题呢?

Q3:我阅读了UWA的你应该知道的AssetBundle管理机制一文,想对其中“每次加载都涉及到解压操作”的理解进行确认:对于new WWW实际是解压到WebStream。而如果是用的LoadFromCacheOrDownload,那么资源是在磁盘,所以在调用www.assetbundle时才做解压。那么有个问题,如果使用直接获取AssetBundle的那些API,解压过程是怎样的呢?CreateFromFile是在调用assetbundle.load的时候从磁盘解压,CreateFromMemory是直接解压到WebStream?

另外,对于WebStream来说,同一个WWW对象多次调用www.assetbundle方法时,得到了栈上的多个变量,但是这些变量都指向同一个WebStream中的对象吗?

Q4:我们在内存优化时发现一个问题,编辑器版本 Unity 5.3.4p6,使用UGUI,场景A中一个Text控件使用自定义字体资源,然后把该控件Text属性勾选为空(disable),再Load一个空场景,看场景A卸载后在内存中的残留,发现有一份引用是 ManagedStaticRefrences()的 Font 内存。如果不是把Text属性disable,则场景A卸载后内存里不会再残留被引用的Font内存,请问可能是什么原因造成的呢?相关例子已经提交给UWA。

Q5:我想了解如何使用顶点色Mask控制明暗关系,才能达到类似崩坏琪亚娜效果?

技术分享连载61

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

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

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

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

技术分享连载62

Q1:在Unity 的 Profiler里,有些记录右边会有Warning的个数信息,请问这个是否影响性能,或者是否有必要修改呢?

Q2:我们设置了TargetFrameRate为30,想避免过高的耗电和发热,请问这样做是合理的么?

Q3:我们美术在制作场景地面的时候,会有如下图所示的非常明显的一条模糊和清晰的分割线。我清楚这是由于Mipmap的使用导致的,我们不想让这条线这么明显,初步的想法是设置Texture的mipMapbias这个参数,这个参数没有在Texture的配置界面上提供。

Q4:我们使用的是Resources.Load和LoadAsync的方式加载资源,这个与AssetBundle的方式比较,能大概帮解释一下优劣么?

Q5:在Unity工程里启动游戏时,会有大量的Warning(类似定义了没有使用的变量这样的Warning)请问这个对真机的性能是否有影响,是否有必要修改掉这些Warning?

技术分享连载63

Q1:我在改血条,我原来是一个Canvas里放了所有血条,后来改成每个血条一个Canvas,再改成每个血条完全不用UGUI,直接用SpriteRenderer绘制,感觉性能越来越差了,怎么办呢?

Q2:请问下在Unity 5.6版本中如何解决预渲染缺少高光的问题?该版本中光照预渲染Directional Mode选项中少了Directional Specular选项,渲染出来的效果场景缺少高光。

Q3:我把骨骼文件的Optimize Game Objects”开启了,然后骨骼信息就没有了,那Avatar换装时候需要处理的骨骼信息怎么办?

Q4:Unity的Mono在内存不够的时候GC操作是即时触发的吗?比如说我当前Mono总内存是20MB,已用15MB(其中5MB可回收),然后我同步加载大量资源,需要9MB内存,Mono上限可能被撑大?

Q5:我在优化动画精度时发现针对Generic效果明显,而Humanoid变化不大,第一组图是Generic优化前后对比,第二组图是Humanoid,优化前后对比,这是为什么呢?

技术分享连载64

Q:Unity 5 的 Shader Variant Collection 功能是否推荐使用?我有以下3个疑点:
1)使用 Shader 变体之后,Shader 是否还能走资源更新?抑或 Shader 不推荐走资源更新?
2)Shader 变体和 Shader Always Include 的主要区别是什么?二者对内存和帧率影响如何?
3)在 Unity 5 较早的版本中,Shader 变体功能似乎有一些Bug,现在是否可靠?

Q2:请问为什么我项目渲染中Material.SetPassFast的开销这么高?这个该如何优化?

Q3:Animator会把所有状态的AnimationClip加载到内存,有什么好的办法可以动态加载?

Q4:为什么Transform.设置Parent会触发Animator的初始化吗?Parent是等于null的。

Q5:美术做粒子的时候,粒子与粒子之间共用资源的情况很多,例如某几个粒子共用一个Material,某几个粒子共用一个贴图等,应该如何组织AssetBundle?要是对应到最细的那个程度,凡是共用过的资源都单独打一个AssetBundle,好像又会很琐碎,假如不那么做,粒子与粒子之间的AssetBundle又会有冗余。这方面有什么好的建议?

技术分享连载65

技术分享连载66

Q1:我在Unity 5.5.2下用AssetBundle依赖打包,但是LoadAllAssets之后,内存中却存在两份相同的文件。

打包过程如下: 将资源A(material)打包到testmaterial.bundle,然后将纹理B打包到testtexture.bundle,再使用一个Sprite C引用纹理B后,将Spirite生成一个Prefab并将其打包到testprefab.bundle。最后导出成的3个Assetbundle之间的依赖关系为:A(testmaterial.bundle)依赖 B(testtexture.bundle),C(testprefab.bundle)依赖B(testtexture.bundle),从最后的生成的manifest也可以看出来依赖关系跟预期的一致。

Q2:Unity 5.5版本下的UGUI,我将字体设置为粗体,发现字体只是变宽不加粗,不像正常的粗体,如下图所示。另外,TestMesh Pro需要预渲染,不能用动态字体,只能用于特定范围,有像NGUI(效果还不错)那种对动态字体加粗的方法么?

Q3:这个红框里面的内存是如何生存的?是实例化生成的吗?但为什么GameObject被销毁掉之后,这部分内存也不会被释放呢?

Q4:请问UGUI Image 在切换Sprite(网络图片) 的时候有卡顿,从Profiler中看到具体卡在SpriteMeshGenerator.TraceShape 这个方法上,如下图所示,有没有什么优化的方法呢?

Q5:New出来的Mesh好像都是可读写的,在我填充完数据以后,有什么办法能把这个Mesh改为只读么?

技术分享连载67

Q1:使用AssetBundle.Unload(true)释放AnimationClip , 但发现AnimationClip在Profiler看到还存在,请问要怎样才释放干净呢?

Q2:如何处理ETC压缩完图片质量模糊和ARGB32内存占用太大这种关系?

Q3:如何降低动画文件的浮点数精度?之前UWA给过思路,但具体怎么个执行方法?

Q4:请问一下iOS平台打出来的带Profiler的包,在XCode里看内存运行期间涨了近60MB,Profile里面看ReservedTotal只涨了10MB,这个是为什么呢?测了很多次,都是xcode内存涨很多,但是资源看不到太大的变化,最后游戏可能会崩溃,求解?

Q5:UWA报告中的资源是否是实时的?我看给的是原始格式,不是压缩后的内存数值。

Unity性能优化大合集,All In One !(更新至8.18)

UWA 技术分享连载 转载的更多相关文章

  1. 【转】apache kafka技术分享系列(目录索引)

    转自:  http://blog.csdn.net/lizhitao/article/details/39499283   估计大神会不定期更新,所以还是访问这个链接看最新的目录list比较好 apa ...

  2. 【技术分享】手把手教你使用PowerShell内置的端口扫描器

    [技术分享]手把手教你使用PowerShell内置的端口扫描器 引言 想做端口扫描,NMAP是理想的选择,但是有时候NMAP并不可用.有的时候仅仅是想看一下某个端口是否开放.在这些情况下,PowerS ...

  3. AY的Dapper研究学习-继续深入-C#开发-aaronyang技术分享

    原文:AY的Dapper研究学习-继续深入-C#开发-aaronyang技术分享 ====================www.ayjs.net       杨洋    wpfui.com      ...

  4. AY的Dapper研究学习-基本入门-C#开发-aaronyang技术分享

    原文:AY的Dapper研究学习-基本入门-C#开发-aaronyang技术分享 ====================www.ayjs.net       杨洋    wpfui.com      ...

  5. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享

    原文:AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享 谢谢大家观看-AY的 VS2017推广系列 Live Unit Te ...

  6. AY写给国人的教程- VS2017 Live Unit Testing[2/2]-C#人爱学不学-aaronyang技术分享

    原文:AY写给国人的教程- VS2017 Live Unit Testing[2/2]-C#人爱学不学-aaronyang技术分享 谢谢大家观看-AY的 VS2017推广系列 Live Unit Te ...

  7. C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享

    原文:C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享 1 : C# Assembly.GetEntryAssembly().GetName().Version. ...

  8. C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享

    原文:C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享 曾经我做office,不想依赖别人dll,就使用了 Type.GetTypeFromProgID 可以根 ...

  9. 破解UltraEdit64 Version 28.20.0.92 技术分享。

    本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com QQ群3244694 补丁程序下载地址:https://download.csdn.net ...

随机推荐

  1. (C/C++学习笔记) 二十. 文件和流

    二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...

  2. jdk8-全新时间和日期api

    1.jdk8日期和时间api是线程安全的 1.java.time  处理日期时间 2.java.time.temporal: 时间校正器.获取每个月第一天,周几等等 3.java.time.forma ...

  3. 2.11 C++转型构造函数

    参考:http://www.weixueyuan.net/view/6343.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参数,如果 ...

  4. rabbitMq无法消费发送的q的问题

    1.问题叙述: 该项目配置了10来个mq,应对新开发需求,我也加了一个mq配置,然后在本地代码当中调用,当中接受,与前面写法相似,项目上测试环境测试.发现发送了queue之后本地消费日志没有的bug. ...

  5. oracle sequence

    代码块 方法一: (1)删除序列; (2)重新创建: 这个方法比较简单粗暴. drop sequence sequence_name; create sequence sequence_name mi ...

  6. L296 EST 科技英语翻译-美学取向 (上)

    tips:对语言进行恰如其分的润饰,讲究词法.句法及篇章的粘连,增加可读性. 1 Accuracy 精确性 科技文章用词要求准确,尽量避免含糊不清和一词多义 dead air静空气 2 Paralle ...

  7. L246‘’

    Should English classes be compulsory at the elementary or primary school level in countries where it ...

  8. Set和Map数据结构

    1.Set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Map JavaScript 的对象 ...

  9. 在Microsoft Power BI中创建地图的10种方法

    今天,我们来简单聊一聊“地图”. 在我们日常生活中,地图地位已经提升的越来越高,出门聚餐.驾驶.坐车.旅行......应运而生的就是各种Map APP. 作为数据分析师,我们今天不讲生活地图,要跟大家 ...

  10. oracle函数创建及调用

    创建函数的语法如下: CREATE [OR REPLACE] FUNCTION function_name[ (argment [ { IN | OUT | IN OUT } ] Type , arg ...