真Unity3d_profiler调试

来源:互联网 发布:天猫数据 编辑:程序博客网 时间:2024/05/16 06:49

==================================================================

希望记录下一些真正工作上碰到的案例,而不仅仅只是书本上的知识和教学视频里的内容

==================================================================

多的不说了,后面才补(待补全)

还记得想当年用SQL 2000的Profiler,当时博主比较年轻,一个月的时间,每天10个小时的工作就只是开Profiler调试,有时候一天也只不能确定一个效能问题,一个月过去了,结果也只是初步确定问题(当时肯定不止我一个人在干这事),不得不说那是一个持续改进的过程,后面可能还需要3~6个月才可以得到些微改善(而实际上,后面根本就没有后面)

当时团队有60个程序员,3大模块

策划(测试)60个左右,

项目做了5年多,一直加功能模块,

*如果你稍微做过一下”FPS调试“,”重构“,”压力测试“等工作,前提是你在一个大牛指导下工作,你应该能感觉到,所有这些工作都有一个前提的,就是范围要定好,现在你知道测试文档的开头写上硬件CPU,内存,等的作用了吧(那本经典的“重构”的书,书名就好像霸气的就叫做《重构》,其实第一章,第一句,就是说重构前你得先有单元测试框架,其实意思就是有一个复杂的软件环境,Helloworld真不需要怎么调试)

*还有就是如果你团队只有5个人,基本上是不需要怎么做压力测试的,有内存泄露等问题,你们自己几个人开箱啤酒自我检讨一番就行了(最后是各种环境,代码量比较大)

*博主在用Profiler的时候,也是有一些配套工具,例如Analyze等,甚至是第三方的工具或者自己团队内部的工具,唯有加以利用各种工具,才能事半功倍


说多了,再说回现在的 Unity3d游戏调试,优化

下图figure-1 是一个MMOA游戏的战斗场景

一个不错的项目,估计3~5个客户端程序员

(只有5个人的项目也做压力测试?3~5个客户端,外+3~5个服务器+5个策划+背后7~8个美工做图+音效外包,而且这几个人是每天14个小时,工作6天的,所以代码量够,而且工作时间长,效率低,会有各种凌乱代码,这种项目适合做压力测试)

特效很多,服务器很稳定,单战场,服务器开几天也不会崩,框架也很好,分层明确

服务器通讯代码对效能影响占比少,当然不排除,服务器一直传消息,战场动态新增GameObject造成fps低下

游戏完成度很高,曾经在XX GC大会演示

但是战场很卡,特效什么的,FPS只有30左右,很多待优化

(我认为比较好的做法是,框架,模块分明,每个星期有研讨会,做好API,常用的模块抽象出来,方便测试,也可以不断迭代,得知哪些代码需要被”重点照顾“,可以考虑做单元测试,C#可以写断言等)

而实际上,如此完成度高项目,几乎没有测试代码,也没看出来项目跟进文档有这样的打算,明显的就是打算GC大会之后,花个1个月左右的时间,无论客户端,服务器,所有程序员一起来“调优”这个代码,能调多少是多少,调不了,项目也是硬上,大不了拉倒,反正程序员不是玩家

实际上,根本没有迭代一说,反正做多少是多少(很多游戏项目都有很好的SVN,只能说明团队里某些人有强迫症而已,SVN规范良好的项目并不能说明什么)

我之前做过一个项目如此,这份代码看起来也如此,曾经一个小弟面试我,是他面试我,而不是我面试他,从他口中得知他在上一个公司“中手游”,会调试帧率等,所以推断出他的项目也是如此,也是曾经和另外一个项目的主程谈,也基本上肯定他们团队就他一个会干事的,所以另一个团队的项目也是如此,就是从来没有能够实现所谓的,教科书上的,比较好的做法

(插个话,我在说说现阶段的我,在结合理想的做法和实际项目,

其实一般服务器会比客户端稳定,也不完完全是程序员个体的原因

主要是服务器框架设计阶段和定义做的工作比较多,这确实对代码稳定和健壮性有帮助,而且如果水平不够的人写服务器,多几个连接的服务器就挂了,

一般不用通讯框架的服务器程序员,项目没2个月就挂了,沉淀下来的都是经得起的考验服务器代码,而且确实很多第三方中间件吧,例如Redis,

相反的,客户端不用框架的项目可以几年正常运行, hello world 程序更是一大堆, 牺牲性能,甚至实现功能有偏差,但是保证快速接触用户,在客户端是可取的

客户端程序工作更多的需要和策划沟通,不断调整,最好是不用思考,成品是需要被客户接受的

--所以衍生了,需求分析,功能测试,产品验收等工作

而服务器工作更多需要脚本,稳定性,有更多的时间思考代码质量,成品是不需要被客户(客户端)接受的

--也就有了,协议规范,压力测试,,运营维护等工作

理想状态也应该是这样的,可是社会的骨感又一次体现出来了

例如《唯品会》等牛B APP,用了超越本身价值的资源投入,用的服务器的做法去做客户端,也是有的,所以也并不是说客户端怎么怎么做就没有服务器稳定

唯品会做的是最顶级的消费,所以用最顶级的原料(最贵的人工)

又例如,马云说的外行人管内行人

有或者,我东哥说的,不管模式轻还是重,反正我有6W个送快递的,还会更多

韩信用兵,多多益善,这3种成功的做法让博主眼界打开,

博主也见过不少硬安框架的客户端,其实没有《唯品会》之流的超资源投入,根本后续都没有发展的,自嗨,摆烂的客户端程序员(架构师)很多

但的确是,传统上,服务器程序员写的代码会比客户端程序员写的代码质量会高一些(并不是说服务器程序员比客户端程序员优秀,质量高只是说代码重用率,迭代率高)

随着JAVA的发展和Android,.Ios的发展,服务器开发也有一大波程序员成长起来了(2000~2010),服务器质量高的比例反而减少了

这是因为移动互联网,现在很多服务器程序员会用几个框架就以为自己是架构师了,然而他们”甚至都不怎么会写程序“,对“软件开发过程”知之甚少,虽然博主没有什么现成数据支持这种说法,但这确实是一个很反智的一个现象

插的这些话,只是博主现阶段的个人看法,对于软件行业趋势的判断,其实国家GDP的高低真的和我们老板姓没什么关系,还是继续说Unity3d Profiler调试吧


figure-1



figure-2

在figure-1可以明显看出5个峰值,其中1个问题是由于figure-2的erro log造成的,其他问题其实都类似,profiler确实不错,能总结问题,发现问题,已经很够用了,(关于Profiler的原理就不在这里叙述了,因为我自己也暂时不能很完整的表述出来),暂时发现是GameObject(包含一些Effect)的初始化问题,有些用了NGUI对象(血条等)


figure-3


在figure-3,显示了error log解决后的截图,效能已经有20%提升,虽然或者android不会输出console, 就不会有这个问题,那ios呢?其实谁知道捏,所以统一用LogManager代替Debug.Log是一个很好的模式,可以统一控制console log

在论坛里,看到很多朋友说“我把所有Debug.Log都替代了,不会有Log”

这个逻辑其实很有问题:

1.如果某一天你需要呢?

2.文章开头说了,实际上,大部分的项目都是在一个月时间内调优,能调多少是多少,这一个月时间就不要再浪费时间在返工上面了,是真正做点“优化“工作的时候了

3.你怎么保证刚来的新人,不在你不注意的时候,多写了一行代码Debug.Log ,这个问题和怎么保证中国足球队进世界杯一样,完全无法保证,

4.还是文章开头说的,起码得有些研讨会,即使只是跑钻引玉也好,其实腾讯,YY等分技术,管理2个员工发展路线还是对的



解决了峰值问题后,其实还有很多值得优化的地方,但保持FPS60+,其实已经很够了,一般很少人能优化到极致,

是不是说在做深化测试,写测试代码,单元测试,就能优化到极致呢?暂时也只是调FPS, 其他硬件,电池等效能也没在调优,我前面也说过了,理想上是可以1.2.3.4.这样的一个完善的,持续改善的团队,但是实际上并不是,特别是国内所谓的游戏公司,不要问我为什么知道的

而Profiler这个组件也足够支撑低峰值60~90+段的代码调优了,确实不错的工具(原理,会在之后的博文更新)

(你看到的所谓技术文章,丢一堆Profiler的名词解释,你觉得写这种技术文章的人花了几天在调试?告诉你,基本上就是看看官网例子就po文了,有多少人能坚持一个月以上,起码博主现在是做不到了)



ps.

1.龙之谷 手游优化经验分享http://www.gameres.com/750842.html

0 0
原创粉丝点击