Unity优化总结

1、在使用NGUI时,每使用一个UITexture,就会有一个DrawCall,在使用图片时,最好将能用到的打成一个图集
2、将单个图片生成Prefab,放在Resources文件夹中,在Resources目录中最好不要放置图片,因为在此目录下的所有东西,都会在打包的时候,将其打入包内,会使得包更大
3、在开始设计界面的时候,尽量让美术出2的幂次方图片,如果实在没有办法则在程序中将其转换成2的幂次方。在使用NGUI做界面时,最好打成图集使用,减少DrawCall、减少内存占用
4、将公用的图片打成一个图集
5、在使用公共图片的时候,如果因为单张的公共图片占用过大(在使用NGUI是可以不用打成图集),将这样的公共大图,打成同一个Bundle,这样可以减小压缩包的大小。
6、游戏背景图片使用的颜色越多,渲染消耗越多,图片也就越大,这样减少一些颜色的使用量,在不影响效果的前提下,将图片颜色减少到一定程度。
7、最好将所有资源打包正Bundle这样可以减少空间占用量,从而减小包大小。注意:在Andriod下,Prefab使用AssestBundle打包之后,有些脚本的引用会断掉,最好也将用到的资源脚本,重新编译一个dll然后,在打包成Bundle,通过C#的反射,和对应的Prefab相关联。

1、在检测碰撞的时候,如果主角要和不同物体发生碰撞,最好设置被碰撞物体的不同层,通过层来归类不同的碰撞物体,减少使用tag,例如人物和飞的怪物、路上跑的怪物,发生接触有不同的效果产生,那么就把飞行的怪物设置一个层,路上的怪物设置为一个层
2、在显示层级的时候,最好先归类出来显示不同层级的先后顺序,比如背景层、怪物层、主角层,这样设置层级显示不会某个物体显示在不需要的物体之上的层级混乱现象
3、在Awake方法中,首先获得Transform组件的引用,在脚本中直接使用之前设置好的引用,这样不会在重复的访问系统的transform组件
4、PureMVC的使用
5、游戏精选中的状态机的使用原理
6、热更新

渲染方面:
1.将同一页面或者同一类型的ui图合并成一个图集,减少渲染时的drawcall。
2.将需要alpha和不需要alpha的图拆分开来做图集,不需要alpha的的图集可以大幅度的做压缩处理,因为这些图像压缩后看起来不会太糟糕。而有alpha的图集压缩会使得图像差别比较大。这样可以减少内存占用。
3.在以上基础上,尽量将图集做压缩处理。只有那些需要高精度的图才不做压缩。这样做可以大幅度减少内存占用
二.减少占用空间大小
1.我使用的是动态资源的加载方式WWW方式。所以在导出资源时我使用BuildAssetBundleOptions.DisableWriteTypeTree 的打包方式,减少包的大小。
2.对每张Texture,都设置对图片进行压缩。
3.让美术减少模型面片数,并在fbx模型设置中,设置对模型进行压缩
4.让美术减少动画帧数,并在动画设置中,设置对动画进行压缩
三.内存
1.最基本的就是对需要的资源进行加载,使用完毕后,释放。
4.内存释放:这里有个重点,我重点测试了一下内存释放的忽视点。在我们利用ngui,或者2dtoolkit进行gui编程时,在释放其gui节点时通常会忘记将gui引用置为null,这就导致了内存泄漏。一些不再使用的贴图或者实例数据仍然继续存留在内存中。对于是否有需要将这些gui变量置为null的说法,我还做了一个实验。
首先将屏幕置空,没有任何多余内存,再将gui展示,接着隐藏gui销毁gameobject,先将所有引用变量置为null,然后再展示,再销毁,这次销毁,不将变量置为null。得出得内存结论就是,不将gui组件变量置为null的,贴图内存还会滞留。
Unity3D之如何将包大小减少到极致

我们将包外的资源压缩成zip文件。这样在加载网络资源时就能省去很多网络流量。下载下来后,对zip文件进行解压,后再对zip文件删除,减少空间占用。

利用动态资源加载有几种方式:
1.将资源放入assetstream文件夹随打包一起打入文件。
2.将部分资源放在服务器,游戏前或游戏中进行加载,并保存到本地。
3.将资源压缩成多个zip文件放在服务器,客户端下载这些zip文件进行解压。
其实www.LoadFromCacheOrDownload加载机制也可以算一种,但似乎u3d4.5.2开始已经摒弃这个接口,大部分人也不太建议使用这个接口,似乎是因为这个界面消耗内存太厉害。其实具体什么原因我也不太清楚。个人认为这个接口太过死板,操作余地太小,受限太大。
资源导入内存的方式有几种:
1.从Resources文件夹中导入。这是阻塞加载最常见的方式,接口Resources.Load();
2.从某地址加载资源www。这是异步加载最常见方式,接口new www(path);
3.直接从文件或者bytes[]生成AssetBundl,接口:AssetBundle.CreateFromFile阻塞方法, AssetBundle.CreateFromMemory异步方法,AssetBundle.CreateFromMemoryImmediate阻塞方法
4.使用File类加载文件,File.ReadAllBytes,File.ReadAllText。
有了资源加载和内存导入后,还需要配备资源验证方式,这样整个项目动态加载体制才完善。资源版本更新方式可以使用json格式并以文件形式查看。验证方式的理解,还需要大家使用在项目里才能体会到真正的用途,才能将原理牢记于心。
验证资源版本有几种:
1.资源整体验证。步骤:1.客户端向服务器发送资源版本。2.服务器匹配最近版本号,若版本号不同,比较两个版本号之间的内容差异,发送差异资源地址。3.客户端删除差异内容中需要删除的文件资源,加载需要下载的文件资源并保存文件。最后保存版本号。
2.单个资源文件的时间戳验证。步骤:1.客户端向服务器发送资源版本号。2.服务器匹配最新版本号,如果不同就重新发送一份资源版本列表,里面包含了资源文件的时间戳。3.保存版本列表。4.在客户端需要加载该资源时比较时间戳是否一致,如果不一样或这不存在就加载资源文件并保存固定时间戳。
3.单个资源文件md5验证。步骤:1.客户端向服务器发送资源版本号。2.服务器匹配最新版本号,如果不同重新发送一分资源版本列表,里面包含了资源文件的md5码。3.客户端比较新旧资源版本列表中的,删除需要删除的和更新的资源。4.在客户端需要加载该资源时查看文件是否存在,如果存在就说明资源是最新的。如果不存在则需要实时下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值