Unity3D优化之路

作者: 我家菇凉 | 来源:发表于2020-01-08 13:54 被阅读0次

从渲染优化,包体大小,再到内存,深入分析与解释如何进行游戏优化。

优化之路分三块:

一.渲染级别。

GUI部分:我使用的是NGUI,它对动态移动、旋转、缩放GUI支持的是比较差的,所以我尽量不要把过多的移动旋转缩放的部分写在GUI中,但很多情况下是避免不了的,比如:大量的伤害数字,物品掉落,图标的移动和旋转等,为了不让GUI去控制这些渲染物体,一小部分我使用3D面片代替,而大部分使用程序去生成面片渲染脱离了GUI的控制。另外在那些静态的GUI中,我使用了静态物体优化的属性,加上排除不必要的GUI设置,使得GUI部分效率足够高。

3D部分:

1.特效是对画面效果最最有影响的部分,尽量少使用粒子或者将粒子的数量减少到最小。

2.尽量减少灯光的使用,而使用烘培后的图来代替。但烘培贴图用多了内存就爆,所以还是要谨慎。

3.使用静态批处理,将那些不动的物体设置为静态,以降低CPU。但unity说静态批处理会增加更多内存。这里也需要权衡。

4.尽可能的将多个物体使用同一个材质球。这样可以有效降低drawcall。虽然在实际操作中比较困难,但还是需要做的。

5.使用动态批处理。将多个不动的,使用相同材质球的物体合并mesh。这个更加有效得降低drawcall。

6.尽量多的关闭的阴影渲染。这个会降低不少drawcall。减少对阴影的计算。

2D部分:

1.将同一页面或者同一类型的ui图合并成一个图集,减少渲染时的drawcall。

2.将需要alpha和不需要alpha的图拆分开来做图集,不需要alpha的的图集可以大幅度的做压缩处理,因为这些图像压缩后看起来不会太糟糕。而有alpha的图集压缩会使得图像差别比较大。这样可以减少内存占用。

3.在以上基础上,尽量将图集做压缩处理。只有那些需要高精度的图才不做压缩。这样做可以大幅度减少内存占用。

二.减少占用空间大小。

你可以参考这篇文章《Unity3D之如何将包大小减少到极致》

1.我使用的是动态资源的加载方式WWW方式。所以在导出资源时我使用BuildAssetBundleOptions.DisableWriteTypeTree 的打包方式,减少包的大小。

2.对每张Texture,都设置对图片进行压缩。

3.让美术减少模型面片数,并在fbx模型设置中,设置对模型进行压缩

4.让美术减少动画帧数,并在动画设置中,设置对动画进行压缩

三.内存

1.最基本的就是对需要的资源进行加载,使用完毕后,释放。

2.GUI部分在GUIManager管理类中增加 对GUI进行定时检查的部分,对不展示的GUI资源进行释放。对于一些ui出现时的释放资源卡顿的问题,可以在ui出现后1秒再释放资源。其他策略可以自己想下,有效就好。

3.因为有些时候一次性加载的资源过多,内存一下子会膨胀,IO过慢导致奔溃,所以我选择资源异步加载。使得加载这么多资源不那么可怕,并且平滑。

4.内存释放:这里有个重点,我重点测试了一下内存释放的忽视点。在我们利用ngui,或者2dtoolkit进行gui编程时,在释放其gui节点时通常会忘记将gui引用置为null,这就导致了内存泄漏。一些不再使用的贴图或者实例数据仍然继续存留在内存中。对于是否有需要将这些gui变量置为null的说法,我还做了一个实验。

首先将屏幕置空,没有任何多余内存,再将gui展示,接着隐藏gui销毁gameobject,先将所有引用变量置为null,然后再展示,再销毁,这次销毁,不将变量置为null。得出得内存结论就是,不将gui组件变量置为null的,贴图内存还会滞留。如下图:

请看红框内绿色曲线,第一次是置空的情况,内存立刻销毁,而第二次是不置空的情况,内存仍然驻留。结论很明显了,所以,在你编程时,将引用置空是件非常重要的事,这会直接影响到你的内存使用量。这也事c#垃圾回收机制引起的,当实例没有引用数量时内存才会被回收,并且彻底销毁。

相关文章

  • unity3d优化总结篇

    unity3d优化总结篇(一)unity3d优化总结篇(二)

  • Unity3D优化之路

    从渲染优化,包体大小,再到内存,深入分析与解释如何进行游戏优化。 优化之路分三块: 一.渲染级别。 GUI部分:我...

  • Unity3D游戏开发技巧系列高清视频教程

    Unity3D游戏开发技巧系列高清视频教程,讲述了Unity3d开发中的高级应用,比如参数优化,行为优化和界面设计...

  • Unity3D内存释放 (转)

    最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于unity3d对于内存的管理与优化...

  • 2021-05-19【Unity】结构体GC相关

    结论 Unity3d 性能优化(GC篇) | 王在京同学 (peakcoder.com)[https://peak...

  • unity 面试 准备

    unity相关 先上参考帖Unity3D :关于UGUI的网格重建、动静分离 关于Unity中的UGUI优化,你可...

  • Unity3D游戏场景优化之批处理

    最近开始研究Unity3D游戏场景优化,每次提及游戏优化这个话题的时候,我的脑海中都会浮现出《仙剑奇侠传六》这个让...

  • ios - 收藏集 - 掘金

    天弘基金移动 App 客户端架构优化之路 - iOS - 掘金天弘基金移动App客户端架构优化之路 随着移动互联网...

  • Unity3D优化总结 基本注意项

    Babybus-u3d技术交流-Unity3D优化总结 基本注意项 1、在使用数组或ArrayList对象时应当注...

  • 跟诸子学游戏 unity3d 优化

    unity3d优化:不过早做优化,用户不容易察觉,消耗的时间是做出来的时间的几倍乃至几十倍也不一定出效果. CPU...

网友评论

    本文标题:Unity3D优化之路

    本文链接:https://www.haomeiwen.com/subject/ajqsactx.html