Unity3D客户端实时同步技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

在玩网络游戏的时候,多人在线,多人组队,多对多PK等等,这些我们经常可以互相看到对方在移动,我们通常称这个为实时同步,有时,我们会看到对方忽然有被拉回的感觉,这个称谓延时操作,就是说客户端和服务器端时间不一致或者是网络不顺畅造成的,接下来我给大家介绍一下在客户端如何实现实时同步。

首先我们要知道玩家周围的其他玩家或者怪物,NPC是如何刷出来的,在这里涉及到服务器的实现,服务器会模拟客户端的场景,也在服务器的GameServer里面生成一个跟客户端同样大小的地图,它里面有个九屏的概念,什么是九屏,九屏是服务器已玩家为中心生成的九个格子,每个格子都有一定的大小,凡是位于玩家的九屏之内的对象都会被服务器刷出来,如图所示:

服务其中的九屏如上图所示,每个玩家都有自己的九屏,这个九屏是随着玩家移动的,在九屏之外就不会被刷出,玩家是看不到的,这也是为什么有时在客户端把可视距离设大了还是看不到,就是这个道理。还是以服务器的为准。所以我们在客户端实现的时候就分如下几步:

第一步是刷玩家自己

第二步是刷玩家九屏的对象

第三步是要随时刷走进玩家九屏或者远离玩家九屏的对象

实现代码如下:

玩家九屏之内的对象刷出来之后,我们接下来就要实现实时同步,实时同步有好多方式,我给大家介绍的方式是目前比较流行的,就是根据玩家的状态进行同步,那状态是什么意思?举个例子,就是玩家从站状态到走状态,状态发生改变要告诉服务器,而服务器会把这个状态改变告诉在玩家九屏之内的对象,玩家开始走了,如果玩家一直走,客户端与服务器是不同信的,而客户端是在一定的时间间隔内存到堆栈里,同时可以发送给服务器,但是服务器是不转发的,他只是在服务器里模拟。一旦状态发生改变立刻取出发给服务器,服务器再群发九屏消息,为了使玩家出现的不突兀,客户端会采用差值的方式,差值是根据时间进行的,这个时间的计算就包括客户端发送给服务器的,以及服务器返回的时间,以及在客户端行走的时间都需要计算的。代码如下:

以上是状态改变的时候发送消息,状态不改变的处理方式如下:

在这里还有一个问题,不知道大家注意了没?就是说如果遇到碰撞体该如何解决?

在这里我们也要做特殊处理,就是说如果碰到阻挡物的话,我们也认为其状态发生了改变,需要发送消息,代码如下:

最后注意一下,客户端为了跟服务器时间上能同步,需要客户端不定时的Ping一下服务器,根据Ping的时间差决定差值。代码如下:

以上整个客户端实时同步就完成了。

时间: 2024-10-01 11:40:38

Unity3D客户端实时同步技术的相关文章

Unity3D客户端实时同步

在玩网络游戏的时候,多人在线,多人组队,多对多PK等等,这些我们经常可以互相看到对方在移动,我们通常称这个为实时同步,有时,我们会看到对方忽然有被拉回的感觉,这个称谓延时操作,就是说客户端和服务器端时间不一致或者是网络不顺畅造成的,接下来我给大家介绍一下在客户端如何实现实时同步. 首先我们要知道玩家周围的其他玩家或者怪物,NPC是如何刷出来的,在这里涉及到服务器的实现,服务器会模拟客户端的场景,也在服务器的GameServer里面生成一个跟客户端同样大小的地图,它里面有个九屏的概念,什么是九屏,

centos6.6配置rsync+sersync实现实时同步分布式多客户端分发同步

1.sersync项目: sersync项目利用inotify与rsync技术实现对服务器数据实时同步到解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,rsync是目前广泛使用的本地及异地数据同步工具,其优点是只对变化的目录数据操作. sersync项目的优点: 1)使用C++编写,对linux系统文件产生的临时文件和重复的文件操作会进行过滤,再结合rsync同步到时候,会减少网络资源,因此速度更快. 2)sersync配置起来很简单,在http://code.

Unity 3D实现帧同步技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 现在竞技类网络游戏比较火,市面上也出现了很多这种类型的游戏竞赛,提到网络游戏就回避不了一个问题:同步技术,多个人在一个游戏场景围攻一个怪物或者说多人组队战斗等等.现在在移动端的游戏由

企业实时同步方案----Rsync+Inotify-Tools

在博文RHCE系列之备份工具----镜像备份Rsync中,我带大家了解 rsync 的诸多特性以及它所支持的四种模式.作为一个镜像备份工具,可以说 rsync 做的很出色. 可是,随着应用系统规模的不断扩大,我们对数据的安全性和可靠性方面的需求也越来越高!Rsync 在高端业务系统中的不足也逐渐暴露了出来. 首先,rsync 在同步数据时,需要扫描所有文件后才进行比对,然后再进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的一个操作,并且往往发生变化的是其中很小的一部分

rsync+inotify实现服务器之间文件实时同步--转

之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道主服务器给备份服务器传输了多少文件,磁盘空间就那么大,做备份的原因:一个是为了保持文件,另外一个是解决主服务器的磁盘饱满问题,但由于不知道备份服务器到底接收了多少文件,所以主服务器里的文件不敢删除(如果没有备份的情况下删除,问题就严重了,我这个是政府的项目,服务器里的文件都是重要的,删错了就走人~~

全网备份+NFS存储+单点实时同步.docx

目  录 老男孩教育 linux 运维就业班第八和九关(周)课后学习效果能力上机大考察... 1 1.1 逻辑图... 1 1.2 50 台集群服务器全网数据备份解决方案... 1 1.2.1 一.搭建rsync备份服务器... 3 1.2.2 二.web01本地测试... 7 1.2.3 web01本地脚本... 7 1.2.4 本地定时任务... 8 1.2.5 backup服务器上脚本... 8 1.2.6 backup定时任务... 8 1.3 网站集群后端 NFS 共享存储搭建及优化解

四.实时同步

01. 课程概念介绍 01. 为什么要用实时同步服务 因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失 02. 实时同步工作原理 a 创建要存储数据的目录 b 利用实时同步的软件监控我们进行备份的数据目录 c 利用rsync服务进行数据推送传输备份 02. 实时同步服务软件部署 a inotify+rsync实现实时同步备份 第一个里程:将inotify软件安装成功 yum install -y inotify-tools 说明:操作系统的yum源文件中,是否存在epel源 w

rsync+inotify-tools实时同步

rsync概述: rsync是类unix系统下的数据镜像备份工具--remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率.你可以使用它进行本地数据或远程数据的复制,Rsync可以使用SSH安全隧道进行加密数

rsync+inotify实时同步

一.Rsync简介: rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数据.rsync可以搭配