当前位置:首页 > 编程开发

公司游戏性能优化建议

webgou9年前 (2018-02-26)编程开发201

 

优化建议FPS均值较低

CPU性能优化方案

·频繁调用的Camera.main

建议脚本做好Main CameraCacheCamera.main实际为GameObject.FindGameObjectsWithTag(MainCamera)调用,主要因为引擎无法得知用户通过脚本设置的MainCameraCPU消耗较高。

·脚本中大量UnityEngine.Object的判等操作

建议改为用InstanceID来判断即Object. GetInstanceID,运行期间保证唯一。 因为Object的判等还有额外的耗时操作,而Int类型的判等就非常快速了。同理,使用Object作为key的数据结构也建议改用InstanceIDkey

·用于查询操作的数据使用list数据结构

List线性结构Contains的耗时非常高,建议改为hashsethashtable之类的查询操作效率高的数据结构。

·加载资源时每帧从Assetbundle加载的Asset数量没有限制

在场景内每帧从Assetbundle加载的Asset数建议限制在25个,数量高时耗时过长容易造成卡顿。

·模型导入设置[Rig]选项页中Optimize GameObject没有勾选

建议开启Optimize GameObject,这个选项可以把SceneManager中用于skinning的节点都去除,节省了场景节点树更新以及查询的CPU消耗,对于需要做挂点的节点可以添加到例外列表中。

·使用第三方音频插件时没有禁用Unity内置音频

不需要使用Unity内置音频模块的时候,建议Editor中通过勾选Edit->Project Settings->Audio->Disable Unity Audio来完全禁用FMOD模块,避免不必要的CPU消耗。

GPU性能优化方案

·特效渲染的Pass数量较多

一些特效的渲染可以合并到同一个Pass以节省GPU开销,另外RenderTexture在可以共用的情况下尽量共用。

·同屏面数过多

同屏面数建议在20W以下,较优情况是控制在10W以内。

·UI元素在需要隐藏的时候使用了设置Alpha0的方式

实际上GPU依然需要对UI mesh进行渲染,建议不要通过设置Alpha0的方式来隐藏UI

·当使用网格作为地形时,适当切分地形网格

在网格顶点数很高情况下需要依靠硬件裁剪来剔除顶点,比较消耗GPU性能,建议按照大概的同屏可见范围来切分地形网格。

·UI元素过多依赖多层元素的混合来达到美术效果

这样会造成较多的Overdraw,建议尽量通过预制纹理来做到想要的效果。

 

 

 

 

优化建议脚本逻辑(Update)耗时高于渲染(Camera.Render)耗时

一般情况下BehaviourUpdate耗时会比Camera.Render耗时低,多人战斗时可能会高些。

建议检查CPU耗时较高的函数,优化代码计算复杂度,降低脚本逻辑耗时。

优化建议Canvas.SendWillRenderCanvases()模块耗时较高

该模块耗时较高表示UI模块压力较大。

建议检查UI模块是否做好动静分离,属性值(位置,缩放等)经常更改的UI元素需要与相对静态的UI元素分布在不同的Canvas中,可以通过在原有的Canvas中创建子Canvas来重新排布UI元素,但是需要注意Canvas的数量也不宜过多,因为drawcallbatch是不能跨Canvas的。

优化建议DrawCalls较高

开启static batchingdynamic batching,较小的动态物体尽量保证其mesh不超过900个顶点属性以符合dynamic batching的要求,同时shader及参数一致的物体尽量合并其纹理以增加batching的可能性

优化建议同屏面数较高

同屏面数高于100K在中低端GPU上很容易成为性能瓶颈(一般移动端shader消耗差异不会很大)。

建议检查项目中面数较高的模型并缩减其面数。

优化建议 RenderTextures内存较高

检查是否有固定分辨率的较大RT,应该根据设备实际分辨率设置RT分辨率;考虑不同效果中使用的RT是否可以共用;UI中使用的RT考虑是否可以用实际模型替代。

优化建议网格资源内存较高

·模型文件导入设置中 Read/Write Enabled 处于勾选状态

除了需要脚本中访问的网格,作为网格碰撞器中的网格,脚本中用StaticBatchingUtility.Combine静态合批的网格,以及粒子系统发射的网格之外,其它模型建议不要勾选此项 ,否则会在内存也保留一份网格实例占用内存。

·模型文件导入设置中 Read/Write Enabled 处于勾选状态

检查模型网格顶点数是否过高;是否有较小的物件使用了较多的顶点,对于纹理资源的参数,我们的建议值为:

对于动态物体,面片数建议在300-2000,材质数建议在1-3

对于静态物体,顶点数建议在500以下,混合纹理数建议在5以下。

 

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=623

标签: unity3d
分享给朋友:

“公司游戏性能优化建议” 的相关文章

【翻译】异常和异常处理(windows平台)

 翻译的不好,莫怪。原文地址: http://crashrpt.sourceforge.net/docs/html/exception_handling.html#getting_exception_context...…

从聊天到交付:我是如何使用 Codex 完成真实工作的

Codex 的价值不只是生成代码或回答问题,而是进入真实工作现场,阅读项目、调用工具、修改文件、验证结果并交付成果。本文结合实际使用过程与社区工作流,介绍如何把 Codex 当作一位可以协作、可以复核、也需要明确边界的数字同事。…

Apple新闻之在线收音机 “微电台” 开始支持 Mac,苹果电脑用户可以听国内广播电台的节目了

    听广播曾是国内苹果电脑用户面临的中国特色难题之一,没有收音机软件,网页版电台又都要求你装 “Windows Media Player”。今天得到并验证了一个好消息:新浪微博配套的在线收音机应用 “微电台” 开始支…

对话框工具栏 DialogBar

一、创建DialogBar的派生类 首先,创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为Overlapped或Popup,否则运行肯定出错;至于边界属性则随用户自己喜欢,一般都是选择None。其余属性也随用户选择,一般没有特…

Mac OS X 下修改网卡地址和抵御 ARP 攻击

用 Mac 系统有一段时间了,这里记录一下自己遇到的需要终端命令解决的问题。网络环境绑定了原先机器的 MAC 地址,由于特殊原因,先把新机器的网卡地址改成原先那台。在终端输入sudo ifconfig en0 ether 00:00:00:00:00:00其中 en0 是你的第一块网卡(以太网卡,非…

详解Android组件的使用

Android开发平台是开放的平台,而位于四层框架顶端的应用开发,必然涉及到Android组件。本文将为大家详细介绍Android组件。组件(Component),在谈及所谓架构和重用的时候,是一个重要的事情。很多时候都会说基于组件的软件架构,指的是期望把程序做乐高似的,有一堆接口标准封装完整的组件…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。