优化方面,除了平时顺手做的代码方面优化,对象池以外,基本上没怎么去关注过,所以这一方面蛮白痴的。今天发现游戏帧率从一开始的100左右,会随着运行时间逐渐降低,甚至降到个位数,所以只能去查阅这方面的资料进行优化了。

文章没有一点干货....没有具体的优化方法(因为我也不知道.....),旨在记录一次分析过程,以便后续碰到类似问题时不会无从下手。

首先使用的分析工具是unity的framedebugger,去对边前后drawcall的数量,发现即使已经勾选了动态批处理,但是场景中的同一种对象,竟然每个是一个drawcall。可能是因为动态批处理的种种限制,导致没办法合批处理,由于这里涉及到模型顶点数,shader属性,通道等知识(没错,我不懂),所以没有再去分析其中缘由,本打算狂补知识去优化drawcall,然后通过对比发现,随着运行时间的增加,drawcall并没有明显的起伏,所以造成帧数降低的原因并不是这个,解决问题要紧,狂补知识先作罢。

然后使用unity profiler分析。cpu那里帧数显示从一开始的200到100,再到60,30,取某一峰值帧,查看耗时,竟然达到了恐怖的80ms+,然后选择hierarchy视图,查看耗时排行,看图

发现了罪魁祸首是GameObject.ActivateAwakeRecursively,竟然耗时57ms,而这个意思是在创建物体,执行awake的操作时,里面的一系列操作所耗的时间,然后我就在疯狂搜索这个东西应该怎么去优化,直到我什么有效信息都没搜索到的时候我开始换了个思路去考虑,首先重新运行项目,在一开始的时候去获取这个的耗时,发现一直在个位数,无论我的场景里面是不是在生成对象,对比可以看出一定是项目运行过程中有什么不当的操作导致的这个耗时在不断地增加,但是游戏里面已经使用了对象池,而且分析对象池内数量和创建出的数量,一直处于平衡状态,并没有随着进程的增加,而创建出很多意外的物体。冷静下来分析之后,想到了框架本身的一个组件,记得每次创建对象时,都会去重复添加这个组件,以前一直以为无所谓的东西,所以一直没有去处理它,修改代码之后,果然,fps一直稳定在100左右,运行了很长时间之后也没有出现掉帧严重的情况。

再看上图,一个logstringtoconsole,意思很明显,log,这里耗时8ms,并且!产生了223.3k的gc,实在是过于恐怖,这个很好解决,把项目里高频率的log都删掉,然后log这块基本就没有什么消耗了。项目发布的时候,一些数据的log可以不用删,毕竟后期真机测试有时候有数据log查起来会很方便,但是高频率的log一定一定要删掉。

再次回到上面关于awake那个问题,进一步实验之后,发现addcomponnet耗时时间与对象本身的组件数量有关,一个简单的demo,场景里面有30个对象,在update里面进行循环遍历所有对象并都添加 一个空的继承mono的component,测试发现,耗时从一开始的1~2ms,一直在增加,增加到9~10ms,当然还会继续增加。有兴趣的可以实验一下,后面查下addcomponnet源码,或者能知道原因。

留坑补shader的知识,drawcall批处理那一块进行优化。

记一次unity3d 游戏帧率踩坑的过程相关推荐

  1. 【Unity游戏开发】Android中如何集成Unity3D项目——入门级踩坑

    最近的学习之路真的是波折,先是想学Kotlin,结果赶上了算法比赛,恶补了几天算法,然后回归Kotlin,这周又需要调研一下Unity3D,需要把Unity项目嵌入到我们的Android项目中. 今天 ...

  2. 记一次fastJson使用的踩坑经历

    他奶奶的,抱歉,不好意思,都要骂娘了.也许是自己第一次用第三方json解析库没啥经验吧,之前都是自己用官方提供的json api 来进行json解析,这次用了下阿里的fastjson,据说比Gson, ...

  3. [转载] python3安装superset踩坑解决过程

    参考链接: Python中的issuperset 1 创建虚拟环境 conda create -n superset python=3.6 activate superset #deactivate ...

  4. nexus-搭建私服--踩坑记

    本人把使用nexus搭建私服的过程踩坑的过程记录一下,主要包含以下问题 nexus安装包官网无法下载,应该被和谐了,使用把最终的下载地址使用迅雷下载,像百度网盘等离线下载不好使.迅雷就是牛.下载地址如 ...

  5. mysql运维工资_MySQL运维踩坑

    image ZERO 背景 本文主要是介绍在MySQL使用运维过程中所遇到的一些坑爹的地方,予自己以做记录! 前言 因操作系统重装之后,安装了mysql5.7,而由此带来了一系列的问题,现将解决这些m ...

  6. storm mysql spout_storm kafkaSpout 踩坑问题记录! offset问题!

    整合kafka和storm例子网上很多,自行查找 问题描述: kafka是之前早就搭建好的,新建的storm集群要消费kafka的主题,由于kafka中已经记录了很多消息,storm消费时从最开始消费 ...

  7. superset安装踩坑过程总结

    搭建这个superset花了我两天的时间,作为一个小白翻遍了全网,但其实都是些很小的问题,感谢网上大腿们的无私贡献,才得以成功,真的自学太难了-- Windows10,64bit 先避坑(我前面花了1 ...

  8. 使用RKNN部署CRNN模型踩坑优化历程

    序言 前段时间使用RKNN部署一个文字识别模型,因为文字识别模型用的是目前最普遍使用的CRNN模型,结构也相对简单:卷积+LSTM+全连接,都是比较元老级别的算子,本来已经部署的过程会很顺利,结果发现 ...

  9. python包发布到pypi或私有仓库 实践及踩坑 ModuleNotFoundError: No module named 'keyring.util.escape' 等

    0.写在开头: 封装我们自己写好的python包然后分享到网络提供给大家使用, 这本来是一个基本操作. 但是之前个人没有主动上传过自己封装的库到pypi, 正好趁这次自己封装简单包提供给大家用的机会, ...

最新文章

  1. MMD_2a_FindSimilarSets
  2. spring中Validation设计与实现
  3. 如何判断变量是否是数字
  4. 聚焦数字货币的发展与监管
  5. LeetCode 168. Excel Sheet Column Title
  6. Js 获取当前页面的高度
  7. python 判断线程是否执行完毕_判断线程池中的线程是否全部执行完毕
  8. 09年全年的case处理总量
  9. IPv6下VRRP配置原理及实例
  10. jsp上传文件到数据库和从数据库下载文件
  11. MFC学习笔记1---准备工作
  12. css+js显示点阵字体/LED七段数码管字体(模拟)
  13. Vissim与python(IntelliJ IDEA )联调环境配置
  14. Oracle 10g安装图解教程
  15. 人人视频android app,人人视频安卓版
  16. java 转16进制_java中进制的转换,Byte与16进制的转换方法
  17. 一文读懂反向传播算法原理
  18. javascript --- 设计模式之单体模式(一)
  19. 小米路由器 mini 重新刷回官方固件
  20. Android ViewPager放入多个XML如何监听其的控件

热门文章

  1. 深度优先遍历(Depth First Search, 简称 DFS)
  2. 第十一章 自动编码器
  3. 关于WiFi-Sensing(无线感知)的未来
  4. 每日linux——more命令
  5. 中国压辊行业市场供需与战略研究报告
  6. 白手起家在我们这个年代还适用吗?是否有人能真正做到?
  7. 计算机网络(中科大郑烇)学习笔记
  8. Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
  9. JavaScript表单验证及注册界面
  10. es管理器免root_ES浏览器专业版-ES文件浏览器专业版(ES File Explorer Pro)下载v4.2.3.6 特别版-西西软件下载...