Untiy3D性能优化实战记录

Posted 弃天笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Untiy3D性能优化实战记录相关的知识,希望对你有一定的参考价值。

记录一下协助一个实际优化的Unity3d的项目。

项目描述

一个比较大型的合成类3D游戏。具有庞大的3D场景,3D地块,3D人物模型,以及3D特效。
UI使用unity3d的UGUI

一、游戏表现问题

游戏整体上比较卡顿,特别是打开某些UI界面,或者主场景等。可以明显感觉到卡顿。尤其是第一次打开特别明显。

二、性能分析

发现项目中使用Unity3d开发人员,几乎是没有3D相关知识的。等于使用unity进行裸奔开发,没有任何的优化方案和规范。让策划和美术尽情得发挥,然后就塞进游戏里面去。这样的3d游戏他能不卡吗?

1.UI打开时卡顿

大部分UI在第一次打开的时候,出现卡顿的情况。

a.加载资源采用同步加载

UI资源一次性同步加载进去,导致阻塞

b.资源过大

有部分UI竟然高达17MB,5-10MB的UI也是不少
这里卡顿,是因为打开UI的时候,采用了同步加载资源的方式,导致UI界面打开的一瞬间,大量同步加载的资源阻塞了渲染,所以卡顿。另外就是少部分UI资源过大,最大的竟然有17MB,10MB的也不少。

2.主场景显示加载时卡顿,运行中场景卡顿

场景进入卡顿的主要原因是场景太大了,unity的场景文件竟然高达50MB,没有经过优化处理,就直接同步加载进来。
其次运行时卡顿的原因,主要是除了场景元素和动画太多之外,没有做其他的优化处理。灯光,阴影,后期处理等等都开启了。场景元素没有做合并批处理

三、综合造成性能卡顿的结论

1. UI、场景、特效资源过大
2. 同步加载资源
3. 没有图集,资源散
4. 缺乏合并批处理,drawCall数量过大
5. 动态阴影,灯光等没有关闭或者优化,后期处理过多
6. 代码层面和服务器通讯方面

四、优化方案

通过性能分析器,以及项目的结构和源码,资源等,大致有以下的一些优化方案

1. 优化过于庞大的资源

对UI、特效进行大小的规范,合理地划分模块

2. 异步加载资源

对UI资源资源进行异步加载,场景重写编辑器和加载器,改成异步一个个加载场景元素

3. 合并图集

UI以及一些人物模型等进行图集打包,对场景的静态原件进行图集打包

4. 控制drawCall的数量

通过打包图集,以及场景静态资源的合并,批处理,可以大大减少drawCall的数量

5. 减少动态处理

用静态阴影代替动态阴影,采用烘培的方式。等等一些常用的3D优化方案,尽可能减少不必要的开销。

6. 代码层面和服务器通讯方面

这个没什么好说,只能仔细优化,通过性能观察器,看每个函数的消耗,针对性地优化。

五、后记

这里只是简单得记录一些基础和大的方向,实际的优化过程中,需要处理每一个细节。是3D的基础原理和优化机制是通用的,基本上3D游戏相关的优化方法和方案都可以参考的。另外就是结合unity自身的机制来进行优。

以上是关于Untiy3D性能优化实战记录的主要内容,如果未能解决你的问题,请参考以下文章

Untiy3D性能优化实战记录

Untiy3D性能优化实战记录

Untiy3D性能优化实战记录

Untiy3D性能优化实战记录

Vue项目实战性能优化

IO 密集型服务 性能优化实战记录