Unity3D客户端实时同步

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

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

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

第一步是刷玩家自己

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

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

实现代码如下:

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

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

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

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

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

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

时间: 2024-08-24 13:39:41

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

Unity3D客户端实时同步技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 在玩网络游戏的时候,多人在线,多人组队,多对多PK等等,这些我们经常可以互相看到对方在移动,我们通常称这个为实时同步,有时,我们会看到对方忽然有被拉回的感觉,这个称谓延时操作,就是说

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

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

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可以搭配

基于OGG的Oracle与Hadoop集群准实时同步介绍

Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段.近期有场景需要做Oracle到Hadoop体系的实时导入,这里以此案例做以介绍.Oracle作为商业化的数据库解决方案,自发性的获取数据库事务日志等比较困难,故选择官方提供的同步工具OGG(Oracle GoldenGate)来解决. 安装与基本配置 环境说明 软件配置 角色 数据存储服务及版本 OGG版本 IP 源服务器 OracleRelease11.2.0.1 Oracle GoldenGate 11.2

inotify+rsync实现实时同步部署

1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Centos6.7 x86_64 rsync服务器端(rsync热备服务器) 192.168.1.17 1.1.2架构图 2.1 部署前检查 2.1.1 检查rsync热备服务器daemon是否起来 1 [[email protected] data]# lsof -i:873 2 COMMAND PID

sersync2+rsync目录文件实时同步备份

说明: 192.168.1.2(sersync+rsync)---------------FTP 192.168.1.3(rsync)--------------------------backup 实验目的: 实时自动同步:192.168.1.2 ------->192.168.1.3到目录:/data/ftpdata ; 764  viconfxml.xml 765  ./GNU-Linux-x86/sersync2 -d -r confxml.xml 767  ./GNU-Linux-x8

rsync结合inotify实现实时同步

背景介绍 中小企业的web应用场景中,web服务器可能是由2台服务器组成,通过DNS的轮询作为负载均衡,此时就需要对2台服务器之间同步的实时性有较高的要求,上一篇文章所介绍的rsync+crontab就不能满足此需求,本章就来介绍使用rsync+inotify完成服务器之间的实时同步 实验说明 操作系统:CentOS6.8,inotify要求内核版本必须为2.6.13以上 源服务器:172.16.10.10/24 目标服务器:172.16.10.20/24 实验目的:将源服务器上的/rsync目

Sersync实时同步

sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步.由金山的周洋开发完成,是目前使用较多的文件同步工具之一.该工具和其他的工具相比有如下优点: sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间.带宽: 安装方便.配置简单: 使用多线程进行同步,能够保证多个服务器实时保持同步状态: