程序员的噩梦,一定是某个角落突然有呼“怎么又这么卡呀???”玩家、运营、产品老是喷你的客户端为什么卡怎么办?总有些技巧,学会了,卡顿的锅,咱技术不背!

李东旭巨人网络客户端软件专家。擅长含有物理、数学等游戏玩法研发,熟悉游戏性能优化,目前负责《球球大作战》客户端相关研发。

本期Live,GAD邀请到了巨人网络客户端资深软件工程师李东旭老师,以《球球大作战》为例,分享了手游客户端的优化技巧、客户端与服务器的同步怎么优化等问题,干货满满,小编本着有福同享的原则整理了Live的精彩内容推送给大家。

1.我们一个游戏在unity3d 里面用DragonBones 做的2d动画 普攻的特效没有分离,加载和运行的时候很卡 cup 占用很高 这个怎么优化呢?

李东旭:动画加载和运行卡,检查一下骨骼结点是不是很多。

2.像是在《球球大作战》中网络延迟到网络恢复的这期间,客户端要怎样处理才能更平滑,客户端会加速跑吗?

092753zzbs2w3w0urw0d6r.jpg
李东旭:出现延迟的话,客户端会根据当前收到的数据进行计算和模拟,使得客户端的球也能继续移动,等网络恢复的时候通过加速平滑的拉过去。

3.手游客户端ios和安卓有什么针对性的优化呢?

李东旭:其实IOS的同体性能比安卓要好很多,所以我们主要集中在安卓这一块,安卓优化好了Ios也就自然而然优化好了。

安卓的优化也主要是通用的那些优化,主要就是代码效率、资源加载、美术模型的优化等。

4.服务器同步的时候不是很平滑,这个怎么优化呢?

李东旭:服务器同步的话,还是需要客户端做一个平滑的处理,使得玩家在游戏中不易感觉出来。

092754exxx5amlasu5cup5.jpg
5.单物理服务器承载量级大概是多少?

李东旭:一个房间大概能承载数百人,一个服务器有上千个房间。


6.想请教一下做状态同步这种框架需要注意哪些问题?和帧同步比起来差异又是如何的?

李东旭:帧同步与状态同步最大的差异就是一个在客户端、一个在服务端,状态同步要比帧同步要好处理些,帧同步比较麻烦一点的就是要保证每个现象都要一样,比较难一点。


7.网络波动的情况下,客户端会不会卡顿严重,有没有什么好的优化办法?

李东旭:小的波动其实影响不大,主要是怕那种发一个消息,很久才收到,会让玩家明显感到卡的情况出现。

092755lw1all14cvcw5tl9.jpg
8.单物理服务器也可以每个房间100人,1000个房间吗?

李东旭:1000个房间是极限情况,我们其实不是每个服务器都这么多的,一般情况大概只有一半左右。

9.Cocos引擎耗电的主要因素有哪些呢?

李东旭:耗电主要是CPU、GPU的工作量很高,CPU主要是我们自己些的代码,GPU主要就是那些美术资源。cocos这个我们用的不是很多,但对于Unity来说,我们有个优化就是降低分辨率,减少引擎渲染的开销。

10.《球球大作战》中用的是Udp还是Tcp?Udp真的效率比tcp高很多吗?因为udp感觉成本比较高,还要保证顺序重发包。

李东旭:刚开始用的Tcp,现在是两种混着用。一般情况会检测玩家的网络情况,网络较好的情况用的是Tcp,波动比较大的话会切换成Udp,这个是动态切换的。Udp的成本的确是比较高,所以前期为了快速上线用的Tcp,现在是玩家反应卡顿过多,所以花大力气做了Udp,Udp的效率确实比Tcp高很多。

11.像unity里的2d动画的骨骼和纹理,一般是多少合适呢?服务器发包频率多少?

李东旭:我们一般采用的是5个骨骼,纹理256KB。服务器发包频率最高每秒10次,在这个频率内的话,服务器还是很流畅的,如果超了的话就会有延迟了。

12.我们第一个包中场景初始的动画很多。unity的的动画和龙骨或者说用dotween那个效率高一点?球球的模型动画或场景ui动画是如何优化的呢?

李东旭:场景的初始动画建议动态加载进来,看不见的先不要加载在产品上面。效率最高的动画其实是Unity的animaton,最简单效率也最好。动画以简单为主,时间越短越好。球球里面也没有使用过多复杂的动画。

13.动画是最好归纳到一个动画状态机 然后统一管理子节点的动画好 还是,每个都是animaton用程序处理好,也就是说是否能相信animator的效率?

李东旭:优先程序来实现动画的状态,如果复杂的话用animaton,因为animaton在使用的时候,加载消耗还是很高的。

14.客户端发送数据到服务端的话,服务端组装帧数据包的时候有加锁吗?

李东旭:客户端发的服务器可以理解为每个玩家都有一个“槽位”,客户端给服务器发送数据的时候就放在这个“槽位”,然后服务器就从这些槽位中取数据。

15.游戏逻辑出BUG了,你们是怎样定位

李东旭:如果是偶然出现的话,就是让它复现,就是按照一定规则复现出现就会容易发现问题了。如果复现还是找不到那么会借助一些比如说断点,看下具体那部分出现了异常。

16.为什么有的客户端包体很大却完全不影响启动速度?

李东旭:客户端的启动速度和包体的大小没有什么直接的关系,取决于运行场景的大小,还有resources里面资源量的大小。

via:Gad

锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛