Unity 3d 帧同步
2015-10-05 21:44
239 查看
最近给两个新人解释帧同步,写了一个简单的帧同步模型,但是公司不给上网,代码上传不了,于是回家重写了一个,但是有些工具类不想写了,在网上找了一些可以用的代码凑合着用了。
帧同步的原理就是在一个回合内(一个固定的时间频率,比如100ms)客户端发服务端发送关键帧,服务端收到所有客户端广播关键帧,所有的客户端收到服务端广播的关键帧后再执行。由于所有的客户端代码都是一样的,执行的帧数也是一样的,所以每个客户端得到的结果都是一样的。
帧同步实现的过程有个很重要的地方就是逻辑层和表现层一定要分开,表现层先行,逻辑层等发到服务端的指令再处理。
帧同步适合做人数比较少(5到8人比较合适,多了数据包的发送量非常大,会比较卡,特别是在手机上),同步要求比较高的游戏,比如FPS游戏和格斗类游戏。
帧同步虽然同步效果好,代码也简单,但是还是有很多蛋疼的地方
(1)断线重连,帧同步的断线重连相当的蛋疼,还要服务端配合。
(2)一个客户端卡了,所有的客户端都会卡,所以有可能一个客户端掉线了,其他人都会卡住
(3)物理引擎,一旦物体处于物理引擎的控制下就不能再强制去设置它的位置,如果强制设置它位置就会出现一些不可预知的结果,所以物理引擎是一个大坑,同步的最好不要用物理引擎,自己模拟就好了
(4)UDP发送的包是不包证顺序的,而且还可能丢包,
下面会附上一个帧同步的模型
服务端:https://github.com/caolaoyao/AsycServer
客户端:https://github.com/caolaoyao/AsycClient
这个模型还有几个问题
1、服务端没有处理超时,一个客户端掉了,所有的客户端都会卡住了,服务端应该设置一个超时回调,一旦超过某个设定的时间没有收到客户端的包,就当它什么也没有做,把关键广播出去
2、服务端和客户端都没有处理收包的顺序
3、同步物体的位置信息的时候应该同步物体的状态和方向,不应该直接同步位置,不然看起来移动的时候会很不自然,虽然提高同步频率可以缓解这个问题,但这不是一种好的做法
帧同步的原理就是在一个回合内(一个固定的时间频率,比如100ms)客户端发服务端发送关键帧,服务端收到所有客户端广播关键帧,所有的客户端收到服务端广播的关键帧后再执行。由于所有的客户端代码都是一样的,执行的帧数也是一样的,所以每个客户端得到的结果都是一样的。
帧同步实现的过程有个很重要的地方就是逻辑层和表现层一定要分开,表现层先行,逻辑层等发到服务端的指令再处理。
帧同步适合做人数比较少(5到8人比较合适,多了数据包的发送量非常大,会比较卡,特别是在手机上),同步要求比较高的游戏,比如FPS游戏和格斗类游戏。
帧同步虽然同步效果好,代码也简单,但是还是有很多蛋疼的地方
(1)断线重连,帧同步的断线重连相当的蛋疼,还要服务端配合。
(2)一个客户端卡了,所有的客户端都会卡,所以有可能一个客户端掉线了,其他人都会卡住
(3)物理引擎,一旦物体处于物理引擎的控制下就不能再强制去设置它的位置,如果强制设置它位置就会出现一些不可预知的结果,所以物理引擎是一个大坑,同步的最好不要用物理引擎,自己模拟就好了
(4)UDP发送的包是不包证顺序的,而且还可能丢包,
下面会附上一个帧同步的模型
服务端:https://github.com/caolaoyao/AsycServer
客户端:https://github.com/caolaoyao/AsycClient
这个模型还有几个问题
1、服务端没有处理超时,一个客户端掉了,所有的客户端都会卡住了,服务端应该设置一个超时回调,一旦超过某个设定的时间没有收到客户端的包,就当它什么也没有做,把关键广播出去
2、服务端和客户端都没有处理收包的顺序
3、同步物体的位置信息的时候应该同步物体的状态和方向,不应该直接同步位置,不然看起来移动的时候会很不自然,虽然提高同步频率可以缓解这个问题,但这不是一种好的做法
相关文章推荐
- Unity3D Mac 版本破解小记
- Unity3D 个人免费版不支持Camera.OnRenderImage
- unity官方demo学习之Stealth(二十四)敌人AI
- unity官方demo学习之Stealth(二十三)敌人射击功能
- unity3D 4.6与上述号码. UI穿透问题,而且不穿透的真机模拟器渗透问题解决
- unity官方demo学习之Stealth(二十二)敌人动画控制
- Unity5中lightmap的坑
- unity coc 战斗回放总结
- 全面理解Unity加载和内存管理
- (七)unity4.6Ugui中国教程文档-------摘要-UGUI Auto Layout
- unity官方demo学习之Stealth(二十一)敌人动画设置类
- unity官方demo学习之Stealth(二十)敌人视听范围
- unity官方demo学习之Stealth(十九)敌人动画控制
- unity官方demo学习之Stealth(十八)敌人初步设定
- unity官方demo学习之Stealth(十七)电梯移动设定
- unity官方demo学习之Stealth(十六)双层门
- unity官方demo学习之Stealth(十五)单开门动画
- unity官方demo学习之Stealth(十四)钥匙卡设定
- unity官方demo学习之Stealth(十三)摄像机跟踪
- unity官方demo学习之Stealth(十二)角色生命值