一种虚拟对象移动同步方法、客户端及服务器转让专利

申请号 : CN201610643328.4

文献号 : CN106302679B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴一帆刘磊何超

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明实施例提供的一种虚拟对象移动同步方法、客户端及服务器,该方法包括:客户端检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;每在判断系统第一累积时间达到预设速度更新时间时,对虚拟对象的速度进行更新;及每在判断系统第二累积时间达到预设位置更新时间时,对虚拟对象的位置进行更新;其中,预设速度更新时间大于预设位置更新时间,且系统第一累积时间在客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在客户端对虚拟对象每进行一次位置更新后重新计算。本发明实施例可具有较高精确性的移动同步效果,且可减小服务器的性能开销。

权利要求 :

1.一种虚拟对象移动同步方法,其特征在于,应用于客户端和服务器,所述方法包括:在客户端检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;

每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;

其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在所述客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在所述客户端对虚拟对象每进行一次位置更新后重新计算;

在服务器检测距虚拟对象的上一次速度及位置更新后的系统累积时间;

每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算;

虚拟对象的速度在客户端和服务器以低频频率更新,虚拟对象的位置在服务器以相同低频频率更新,虚拟对象的位置在客户端以高频频率更新。

2.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述客户端检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间包括:每n个逻辑计算时间检测一次距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间,n为不小于1的整数。

3.根据权利要求2所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:检测用户的移动控制操作,确定所述用户的移动控制操作指示的虚拟对象的移动控制参数;

根据所述移动控制参数,以虚拟对象的当前速度进行位置更新;及将携带有所述移动控制参数的移动控制操作请求发送给服务器;

在所述服务器根据所述移动控制参数更新虚拟对象的位置及速度后,接收服务器发送的移动更新同步包;

根据所述移动更新同步包对虚拟对象进行速度更新。

4.根据权利要求2所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:接收服务器发送的移动更新同步包;

根据所述移动更新同步包对虚拟对象进行速度及位置更新。

5.根据权利要求4所述的虚拟对象移动同步方法,其特征在于,所述对所述虚拟对象的速度进行更新包括:根据服务器最近一次发送的移动更新同步包,确定虚拟对象的速度更新趋势,及所述速度更新趋势对应的加速度值;

根据该速度更新趋势及加速度值,进行虚拟对象的速度更新。

6.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述对所述虚拟对象的位置进行更新包括:确定所述虚拟对象的当前位置朝向及当前速度;

以所述当前位置朝向及当前速度,进行虚拟对象的位置更新。

7.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述预设更新时间为所述预设位置更新时间的预定倍数,预定倍数为大于3的自然数。

8.根据权利要求1-7任一项所述的虚拟对象移动同步方法,其特征在于,基于角色控制器更新所述虚拟对象的速度和/或位置。

9.根据权利要求8所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:基于角色控制器定义虚拟对象的移动模型;其中,虚拟对象的移动模型使用胶囊体实现;

所述基于角色控制器更新所述虚拟对象的速度或位置包括:在每一次对所述虚拟对象进行速度或者位置更新时,对所述虚拟对象的移动模型作线性投射处理,以主动查询虚拟场景的物理世界中虚拟对象的速度或位置,实现更新所述虚拟对象的速度或位置。

10.根据权利要求9所述的虚拟对象移动同步方法,其特征在于,所述基于角色控制器定义虚拟对象的移动模型包括:使用可扩展的角色控制器,对步兵和骑兵定义移动模型,以通过对步兵和骑兵的移动模型,定义不同的参数组合和设置,使得步兵的移动模型支持任意方向的匀速或变速直线运动,骑兵的移动模型支持圆周运动或变圆周运动。

11.根据权利要求8所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:接收从场景编辑器中导出的,与服务器相同接收的三维场景的地形行走层数据,三维场景中静态对象的物理碰撞数据,和三维场景中动态对象的物理碰撞数据。

12.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:确定客户端与服务器间的响应延迟;

如果预设的缓冲时间大于所述响应延迟,则确定虚拟对象的移动同步处理正常;

如果预设的缓冲时间小于所述响应延迟,则客户端重新计算系统第一累积时间和系统第二累积时间。

13.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:在接收到服务器的移动更新同步包时,计算本地所确定的虚拟对象第一更新位置,与服务器的移动更新同步包通知的虚拟对象第二更新位置的位置差;

如果所计算的位置差大于预定位置差值,在设定多帧内,线性地将所述虚拟对象由虚拟对象第一更新位置移动到虚拟对象第二更新位置。

14.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述服务器检测距虚拟对象的上一次速度及位置更新后的系统累积时间包括:每n个逻辑计算时间检测一次距虚拟对象的上一次速度及位置更新后的系统累积时间,n为不小于1的整数。

15.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:接收客户端发送的移动控制操作请求,所述移动控制操作请求携带有移动控制参数;

根据所述移动控制参数更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端;

或,在检测到虚拟对象的移动状态发生自身跳转时,更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端。

16.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:接收从场景编辑器中导出的,与客户端相同接收的三维场景的地形行走层数据,三维场景中静态对象的物理碰撞数据,和三维场景中动态对象的物理碰撞数据。

17.根据权利要求1所述的虚拟对象移动同步方法,其特征在于,所述方法还包括:确定客户端上报的虚拟对象的更新位置,与所述虚拟对象在服务器中最近确定的位置的位置差;

如果所述位置差小于预定的位置阈值,将虚拟对象的位置更新为客户端上报的更新位置。

18.一种虚拟对象移动同步系统,包括客户端和服务器,其特征在于,所述客户端包括:第一检测模块,用于检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;

第一更新模块,用于每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;

其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在所述客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在所述客户端对虚拟对象每进行一次位置更新后重新计算;

所述服务器包括:

第二检测模块,用于检测距虚拟对象的上一次速度及位置更新后的系统累积时间;

第二更新模块,用于每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算;

虚拟对象的速度在客户端和服务器以低频频率更新,虚拟对象的位置在服务器以相同低频频率更新,虚拟对象的位置在客户端以高频频率更新。

说明书 :

一种虚拟对象移动同步方法、客户端及服务器

技术领域

[0001] 本发明涉及数据处理技术领域,具体涉及一种虚拟对象移动同步方法、客户端及服务器。

背景技术

[0002] 虚拟对象的移动同步是指,客户端中控制的虚拟对象的移动状态,需与服务器中控制的该虚拟对象的移动状态保持一致性,即客户端对虚拟对象的移动状态更新,需与服务器对该虚拟对象的移动状态更新保持一致性;虚拟对象一般应用在游戏、仿真等虚拟场景中,以游戏场景为例,虚拟对象如游戏用户控制的游戏角色,游戏中的逻辑物件(如怪物)等;如用户在游戏客户端侧执行针对游戏对象的移动控制操作,并控制游戏对象向前奔跑,则游戏客户端和游戏服务器需同步的控制该游戏对象向前奔跑,使得游戏客户端和游戏服务器对同一游戏对象的移动控制相一致。
[0003] 虚拟对象的移动同步是保持客户端和服务器一致性处理同一虚拟对象的移动数据,保持游戏、仿真等虚拟场景稳定运行的基础;考虑移动同步的精确性及服务器的性能开销问题,提供一种移动同步效果精确性较高,且服务器的性能开销较小的移动同步方法,成为了本领域技术人员需要考虑的问题。

发明内容

[0004] 有鉴于此,本发明实施例提供一种虚拟对象移动同步方法、客户端及服务器,以在保证具有较高精确性的移动同步效果的基础上,减小服务器的性能开销。
[0005] 为实现上述目的,本发明实施例提供如下技术方案:
[0006] 一种虚拟对象移动同步方法,应用于客户端,所述方法包括:
[0007] 检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0008] 每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0009] 其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在所述客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在所述客户端对虚拟对象每进行一次位置更新后重新计算。
[0010] 本发明实施例还提供一种虚拟对象移动同步方法,应用于服务器,所述方法包括:
[0011] 检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0012] 每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0013] 本发明实施例还提供一种客户端,包括:
[0014] 第一检测模块,用于检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0015] 第一更新模块,用于每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0016] 其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在所述客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在所述客户端对虚拟对象每进行一次位置更新后重新计算。
[0017] 本发明实施例还提供一种服务器,包括:
[0018] 第二检测模块,用于检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0019] 第二更新模块,用于每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0020] 基于上述技术方案,本发明实施例针对虚拟对象的速度和位置的不同更新需求,采用不同的频率进行更新,即虚拟对象的速度在客户端和服务器以低频频率更新,虚拟对象的位置在服务器以该相同低频频率更新,虚拟对象的位置在客户端以高频频率进行更新,可使得虚拟对象的速度和位置的更新符合实际的虚拟场景运行需求,得到较高精确性的移动同步效果,且服务器均以低频频率进行速度更新和位置更新,较大的减少了服务器的性能开销。可见,本发明实施例可在保证移动同步效果具有较高精确性的基础上,减小服务器的性能开销。

附图说明

[0021] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0022] 图1为本发明实施例提供的虚拟对象移动同步系统的结构框图;
[0023] 图2为本发明实施例提供的虚拟对象移动同步方法的信令流程图;
[0024] 图3为本发明实施例提供的虚拟对象移动同步方法的另一信令流程图;
[0025] 图4为本发明实施例提供的虚拟对象移动同步方法的流程图;
[0026] 图5为本发明实施例提供的虚拟对象移动同步方法的另一流程图;
[0027] 图6为本发明实施例提供的虚拟对象移动同步方法的再一流程图;
[0028] 图7为本发明实施例提供的虚拟对象移动同步方法的又一流程图;
[0029] 图8为本发明实施例提供的虚拟对象移动同步方法的又另一流程图;
[0030] 图9为本发明实施例提供的虚拟对象移动同步方法的又再一流程图;
[0031] 图10为本发明实施例提供的虚拟对象移动同步方法的另又一流程图;
[0032] 图11为客户端和服务器的移动更新时间轴的示意图;
[0033] 图12为游戏客户端与游戏服务器的组件示意图;
[0034] 图13为现有技术基于2D网格模拟的移动同步方案;
[0035] 图14为场景编辑器与游戏客户端和游戏服务器的关系示意图;
[0036] 图15为3D场景中静态物件的物理碰撞数据的示意图;
[0037] 图16为3D场景中动态物件的物理碰撞数据的示意图;
[0038] 图17为3D场景中地形行走层数据的示意图;
[0039] 图18为基于Character Controller的移动模型的示意图;
[0040] 图19为步兵移动模型的示意图;
[0041] 图20为骑兵移动模型的示意图;
[0042] 图21为线速度模拟角速度的示意图;
[0043] 图22为变圆周运动的示意图;
[0044] 图23为客户端和服务器的移动更新时间轴的另一示意图;
[0045] 图24为本发明实施例提供的游戏效果示意图;
[0046] 图25为本发明实施例提供的客户端的结构框图;
[0047] 图26为终端设备的硬件结构框图;
[0048] 图27为本发明实施例提供的服务器的结构框图。

具体实施方式

[0049] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0050] 图1为本发明实施例提供的虚拟对象移动同步系统的结构框图,参照图1,该虚拟对象移动同步系统可以包括:客户端10和服务器20;以游戏虚拟场景为例,客户端10可以是游戏客户端,服务器20可以是游戏服务器;以仿真虚拟场景为例,客户端10可以是仿真客户端,服务器20可以是仿真服务器;
[0051] 客户端10可以是设置于终端设备上的,为网络游戏等虚拟场景提供本地服务的客户端;
[0052] 服务器20可以是网络侧的为网络游戏等虚拟场景提供网络服务的服务器,服务器可以是单台服务器实现,也可以是多台服务器组成的服务器群组;
[0053] 在本发明实施例中,虚拟对象的移动同步分离为了虚拟对象的速度更新同步,和虚拟对象的位置更新同步;即客户端需分别对虚拟对象的速度和位置进行更新,服务器需分别对虚拟对象的速度和位置进行更新,且客户端所更新的虚拟对象的速度,与服务器所更新的虚拟对象的速度需保持一致性,客户端所更新的虚拟对象的位置,与服务器所更新的虚拟对象的位置需保持一致性;
[0054] 客户端对虚拟对象进行速度更新的频率,可以服务器对虚拟对象进行速度更新的频率为准,且采取低频频率进行虚拟对象的速度更新;由于在没有用户干预的情况下,虚拟对象的速度在一定速度变化趋势内保持的连续性较强,本发明实施例可以低频频率进行虚拟对象的速度更新,且为考虑服务器的性能开销,客户端的虚拟对象速度更新频率可以服务器的虚拟对象速度更新频率为准;如客户端与服务器约定的虚拟对象速度更新频率是多少,则客户端采用约定的频率进行虚拟对象的速度更新;
[0055] 另一方面,在进行虚拟对象的位置更新时,为保证客户端的处理流畅性,客户端可以高频频率进行虚拟对象的位置更新;而为考虑服务器的性能开销,服务器可以与速度更新频率相同的低频频率进行虚拟对象的位置更新;
[0056] 本发明实施例将虚拟对象的移动同步分离为虚拟对象的速度更新同步,和虚拟对象的位置更新同步,允许客户端和服务器使用不同的更新频率来进行虚拟对象的速度更新和位置更新;速度更新频率以服务器的设置为准,采取低频频率更新,且客户端以高频频率进行位置更新,服务器以相同的低频频率进行位置更新;针对虚拟对象的速度和位置的不同更新需求,本发明实施例采用不同的频率进行更新,可使得虚拟对象的速度和位置的更新符合实际的虚拟场景的运行需求,能够得到较高精确性的移动同步效果,且服务器均以低频频率进行速度更新和位置更新,较大的减少了服务器的性能开销。
[0057] 结合图1所示虚拟对象移动同步系统,图2示出了本发明实施例提供的虚拟对象移动同步方法的信令流程图,参照图2,该流程可以包括:
[0058] 步骤S10、客户端与服务器建立通信连接;
[0059] 客户端可启动网络游戏、仿真应用等,以加载虚拟场景,并与服务器建立通信连接。
[0060] 步骤S11、客户端检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0061] 可选的,以游戏场景为例,虚拟对象可以是所述客户端控制的游戏角色,也可以是客户端当前展示的游戏场景中的其他游戏角色、逻辑物件等;以仿真虚拟场景为例,虚拟对象可以是所述客户端控制的仿真对象(如能够运动的人,动物等仿真物体);
[0062] 客户端中虚拟对象的上一次速度更新是虚拟对象最近一次的速度更新,虚拟对象最近一次的速度更新可以是采用图2所示流程,以低频频率所进行的速度更新;虚拟对象最近一次的速度更新也可能是客户端基于服务器的移动更新同步包所进行的速度更新;
[0063] 虚拟对象的上一次位置更新是虚拟对象最近一次的位置更新,虚拟对象最近一次的位置更新可以是采用图2所示流程,以高频频率所进行的位置更新;虚拟对象最近一次的位置更新也可能是客户端基于用户的移动控制操作或服务器的移动更新同步包,所进行的位置更新;
[0064] 可选的,在本发明实施例中,系统第一累积时间可以在客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间可以在客户端对虚拟对象每进行一次位置更新后重新计算;重新计算可以是清零重新计算,也可以是重置到预设时间值、由预设时间值开始重新计算时间累积值。
[0065] 步骤S12、客户端每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0066] 可选的,预设速度更新时间可以是所设置的低频频率对应的频率时间,预设位置更新时间可以是所设置的高频频率对应的频率时间,预设速度更新时间应大于预设位置更新时间,即客户端可以相对较大的时间间隔进行虚拟对象的速度更新,以相对较小的时间间隔进行虚拟对象的位置更新;
[0067] 客户端可每在判断系统第一累积时间达到预设速度更新时间时,对虚拟对象进行速度更新,达到低频频率更新虚拟对象速度的目的,客户端可每在判断系统第二累积时间达到预设位置更新时间时,对虚拟对象进行位置更新,达到高频频率更新虚拟对象位置的目的;
[0068] 在本发明实施例中,客户端可实时或者定时的检测系统第一累积时间及系统第二累积时间,并在每检测到的第一累积时间达到预设速度更新时间时,进行一次速度更新,在每检测到系统第二累积时间达到预设位置更新时间时,进行一次位置更新;且每在进行一次速度更新后,重新计算系统第一累积时间,每在进行一次位置更新后,重新计算系统第二累积时间;
[0069] 优选的,客户端可每tick(tick为逻辑计算时间,一tick表示一次逻辑计算时间)检测一次系统第一累积时间及系统第二累积时间。
[0070] 步骤S13、服务器检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0071] 服务器以相同的低频频率更新虚拟对象的速度及位置,因此服务器可同时对虚拟对象的速度及位置进行更新,本发明实施例可统一的检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0072] 可选的,服务器中虚拟对象的上一次速度及位置更新,可以是虚拟对象最近一次的速度及位置更新,虚拟对象最近一次的速度及位置更新可以是采用图2所示流程,以低频频率所进行的速度及位置更新;也可能是服务器基于用户的移动控制操作所进行的速度及位置更新,或者服务器基于虚拟对象在虚拟场景中的移动状态自身跳转所进行的速度及位置更新,移动状态自身跳转如虚拟对象在移动中撞到障碍物速度突减为零,或者从高空突然掉下等情况;
[0073] 可选的,在本发明实施例中,系统累积时间可以在服务器对虚拟对象每进行一次速度及位置更新后重新计算,如清零重新计算,或重置到预设时间值、由预设时间值开始重新计算时间累积值等。
[0074] 步骤S14、服务器每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新。
[0075] 预设更新时间可以与客户端所设置的预设速度更新时间相同,从而客户端和服务器可以相同的低频频率进行速度更新,且服务器以相同的低频频率进行位置更新,减小服务器的性能开销,且保持客户端与服务器间的虚拟对象速度更新同步;而客户端采用高频频率进行位置更新,可保证客户端的处理流畅性。
[0076] 在本发明实施例中,服务器可实时或者定时的检测系统累积时间,并在每检测到的系统累积时间达到预设更新时间时,进行一次速度及位置更新,且每在进行一次速度及位置更新后,重新计算系统累积时间;优选的,服务器可每tick检测一次系统累积时间。
[0077] 可选的,图1所示流程中,步骤S11~S12,及,步骤S13~S14间可以没有明显先后顺序;网络游戏等虚拟场景启动后,客户端与服务器可分别依据步骤S11~S12,步骤S13~步骤S14进行虚拟对象的速度和位置更新。
[0078] 本发明实施例针对虚拟对象的速度和位置的不同更新需求,采用不同的频率进行更新,即虚拟对象的速度在客户端和服务器以低频频率更新,虚拟对象的位置在服务器以该相同低频频率更新,虚拟对象的位置在客户端以高频频率进行更新,可使得虚拟对象的速度和位置的更新符合实际的虚拟场景的运行需求,得到较高精确性的移动同步效果,且服务器均以低频频率进行速度更新和位置更新,较大的减少了服务器的性能开销。可见,本发明实施例可在保证移动同步效果具有较高精确性的基础上,减小服务器的性能开销。
[0079] 可选的,客户端对虚拟对象进行位置更新还可以是基于用户的移动控制操作触发,对虚拟对象进行速度更新还可以是基于服务器所发送的移动更新同步包触发;
[0080] 相应的,客户端检测到用户的移动控制操作,并确定用户的移动控制操作指示的虚拟对象的移动控制参数后,可基于该移动控制参数,以虚拟对象的当前速度进行位置更新,并将相应的用户的移动控制操作请求发送给服务器;
[0081] 服务器可基于用户的移动控制操作请求指示的移动控制参数,实现虚拟对象的位置更新及速度更新,并且服务器进行虚拟对象的位置及速度更新后,可生成移动更新同步包并发送给客户端;客户端可基于移动更新同步包实现虚拟对象的速度更新;
[0082] 相应的,在图2所示流程的基础上,图3示出了本发明实施例提供的虚拟对象移动同步方法的另一信令流程图,参照图3,该流程可以包括:
[0083] 步骤S20、客户端检测用户的移动控制操作,确定所述用户的移动控制操作指示的虚拟对象的移动控制参数;
[0084] 移动控制参数可以包括:虚拟对象的位置控制参数、朝向控制参数、速度控制参数等。
[0085] 步骤S21、客户端根据所述移动控制参数,以虚拟对象当前的速度进行位置更新;
[0086] 步骤S22、客户端将携带有所述移动控制参数的移动控制操作请求发送给服务器;
[0087] 可选的,步骤S21和步骤S22可同时执行。
[0088] 步骤S23、服务器根据所述移动控制参数对虚拟对象进行位置及速度更新;
[0089] 步骤S24、服务器对虚拟对象进行位置及速度更新后,生成移动更新同步包,将所述移动更新同步包发送给客户端;
[0090] 可选的,移动更新同步包中可以包括:虚拟对象的更新后速度、位置、朝向、服务器更新的时间戳等同步数据。
[0091] 步骤S25、所述客户端根据所述移动更新同步包对虚拟对象进行速度更新。
[0092] 可选的,客户端可使用移动更新同步包中指示的虚拟对象的更新后速度、位置、朝向、服务器更新的时间戳等信息,进行速度更新。
[0093] 可以看出,客户端除通过图2所示流程,每在系统第一累积时间达到预设速度更新时间时,进行一次虚拟对象的速度更新外,还可在接收到服务器发送的移动更新同步包时,即时主动的进行虚拟对象的速度更新;客户端除通过图2所示流程,每在系统第二累积时间达到预设位置更新时间时,进行一次虚拟对象的位置更新外,还可在检测到用户的移动控制操作时,基于用户的移动控制操作指示的移动控制参数,即时主动的进行虚拟对象的位置更新;
[0094] 值得注意的是,客户端可在接收到移动更新同步包时,即时主动的进行虚拟对象的速度更新,而客户端在对虚拟对象的位置即时主动的进行更新时,可不需要基于移动更新同步包实现;可以想见的是,客户端和服务器可拥有一套相同的虚拟对象位置更新逻辑或算法,客户端和服务器可基于该相同的虚拟对象位置更新逻辑或算法,独自的根据移动控制参数进行虚拟对象的位置更新;但客户端对虚拟对象的速度更新,需等待接收到服务器的移动更新同步包后才主动进行;
[0095] 服务器除通过图2所示流程,每在系统累积时间达到预设更新时间时,进行一次虚拟对象的速度及位置更新外,还可在接收到用户的移动控制操作请求,基于用户的移动控制操作请求所携带的移动控制参数,即时主动的对虚拟对象进行位置及速度更新;
[0096] 可选的,客户端在通过图3所示方法每进行一次虚拟对象的速度更新后,系统第一累积时间需重新计算,客户端在通过图3所示方法每进行一次虚拟对象的位置更新后,系统第二累积时间需重新计算;服务器在通过图3所示方法每进行一次虚拟对象的速度及位置更新后,系统累积时间需重新计算。
[0097] 可选的,作为一种替换方式,客户端也可不直接基于所检测的用户的移动控制操作对虚拟对象进行位置更新,而是可等待接收到服务器发送的移动更新同步包后,再进行虚拟对象的位置及速度更新。
[0098] 可选的,作为一种替换方式,服务器生成移动更新同步包的情况并不限于接收到用户的移动控制操作请求的情况,还可能是检测到虚拟对象在游戏等虚拟场景中的移动状态发生自身跳转时,进行虚拟对象的位置及速度更新,并生成移动更新同步包发送给客户端;此时,客户端可基于移动更新同步包进行虚拟对象的速度更新,或者,可速度和位置同时更新。
[0099] 站在客户端的角度,图4示出了本发明实施例提供的虚拟对象移动同步方法的流程图,该方法可应用于客户端,客户端如游戏客户端等,参照图4,该方法可以包括:
[0100] 步骤S100、检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0101] 步骤S110、每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新。
[0102] 其中,预设速度更新时间大于预设位置更新时间,且系统第一累积时间可以在客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间可以在客户端对虚拟对象每进行一次位置更新后重新计算;
[0103] 由于预设速度更新时间大于预设位置更新时间,因此客户端可以相对低频频率对虚拟对象进行速度更新,以相对高频频率对虚拟对象进行位置更新。
[0104] 可选的,客户端可每tick检测一次系统第一累积时间及系统第二累积时间,相应的,图5示出了本发明实施例提供的虚拟对象移动同步方法的另一流程图,该方法可应用于客户端,参照图5,该方法可以包括:
[0105] 步骤S200、一tick开始;
[0106] 步骤S210、检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0107] 步骤S220、判断系统第一累积时间是否达到预设速度更新时间,若是,执行步骤S230,若否,返回步骤S200;
[0108] 步骤S230、对所述虚拟对象的速度进行更新,并重新计算系统第一累积时间,返回步骤S200;
[0109] 步骤S240、判断系统第二累积时间是否达到预设位置更新时间,若是,执行步骤S250,若否,返回步骤S200;
[0110] 步骤S250、对所述虚拟对象的位置进行更新,并重新计算系统第二累积时间,返回步骤S200。
[0111] 可选的,一tick仅是执行图5所示方法的一种可选周期,本发明实施例也可设定n个tick为执行图5所示方法的周期,即客户端可每n个tick检测一次距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;并每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新,及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0112] 可选的,n的取值可以是不小于1的整数。
[0113] 可选的,图4所示方法对虚拟对象进行速度更新时,客户端可根据服务器最近一次发送的移动更新同步包,确定虚拟对象的速度更新趋势(如速度变小或速度变大),及所述速度更新趋势对应的加速度值(如该速度更新趋势下,最近的设定时间段内速度更新对应的加速度值),从而根据该速度更新趋势及加速度值,每在系统第一累积时间达到预设速度更新时间时,进行虚拟对象的速度更新;
[0114] 如最近一次服务器发送的移动更新同步包是基于用户的加速操作触发,则移动更新同步包所指示的虚拟对象的速度更新趋势可以是速度变大,且用户的加速操作触发的对应加速度值为3米每秒平方(3米每秒平方仅为加速度值的一种可选形式,具体数值并不受限),则客户端可在系统第一累积时间达到预设速度更新时间时,在虚拟对象当前速度的基础上,以3米每秒平方作加速度运算,进行虚拟对象的速度更新;
[0115] 图4所示方法对虚拟对象进行位置更新时,客户端可确定虚拟对象的当前位置朝向及当前速度,从而以该当前位置朝向及当前速度,每在系统第二累积时间达到预设位置更新时间时,进行虚拟对象的位置更新;
[0116] 如虚拟对象的当前速度为5米每秒(5米每秒仅为当前速度的一种可选形式,具体数值并不受限),当前位置朝向为朝北奔跑,则在无用户操作干预的情况下,客户端可在系统第二累积时间达到预设位置更新时间时,以5米每秒的速度朝北更新虚拟对象的位置。
[0117] 可选的,客户端除通过图4、图5所示方法周期性的更新虚拟对象速度和位置外,还可基于用户操作即时主动的更新虚拟对象位置,基于服务器反馈的移动更新同步包即时主动的更新虚拟对象速度;
[0118] 相应的,图6示出了本发明实施例提供的虚拟对象移动同步方法的再一流程图,该方法可应用于客户端,参照图6,该方法可以包括:
[0119] 步骤S300、检测用户的移动控制操作,确定所述用户的移动控制操作指示的虚拟对象的移动控制参数;
[0120] 移动控制参数可以包括:虚拟对象的位置控制参数、朝向控制参数、速度控制参数等。
[0121] 步骤S310、根据所述移动控制参数,以虚拟对象的当前速度进行位置更新;
[0122] 可选的,虚拟对象当前速度可以是当前进行虚拟对象的位置更新时,虚拟对象对应的速度;
[0123] 可选的,客户端根据所述移动控制参数,以虚拟对象的当前速度进行位置更新,可以认为是客户端对虚拟对象进行位置更新的一种形式;基于前述系统第二累积时间在客户端对虚拟对象每进行一次位置更新后重新计算的思想,客户端根据所述移动控制参数,以虚拟对象的当前速度进行位置更新后,需重新计算系统第二累积时间,如将当前的系统第二累积时间进行清零并重新计算。
[0124] 步骤S320、将携带有所述移动控制参数的移动控制操作请求发送给服务器;
[0125] 步骤S330、在所述服务器根据所述移动控制参数更新虚拟对象的位置及速度后,接收服务器发送的移动更新同步包;
[0126] 可选的,移动更新同步包中可以包括:虚拟对象的更新后速度、位置、朝向、服务器更新的时间戳等同步数据。
[0127] 步骤S340、根据所述移动更新同步包对虚拟对象进行速度更新。
[0128] 可选的,客户端可使用移动更新同步包中指示的虚拟对象的更新后速度、位置、朝向,服务器更新的时间戳等信息,进行速度更新;如客户端可比对服务器更新的时间戳与当前时间的时间差值,基于虚拟对象的更新后速度、位置、朝向,确定虚拟对象在所述时间差值下对应的速度调整值,从而基于移动更新同步包指示的更新后速度与所述速度调整值,在客户端侧更新虚拟对象的速度;
[0129] 可选的,在客户端与服务器的网络情况良好,如网络延迟小于预定延迟时,客户端可直接以移动更新同步包中指示的更新后速度,对虚拟对象进行速度更新。
[0130] 可选的,客户端根据所述移动更新同步包对虚拟对象进行速度更新,认为是客户端对虚拟对象进行速度更新的一种形式;基于前述系统第一累积时间在客户端对虚拟对象每进行一次速度更新后重新计算的思想,客户端根据所述移动更新同步包对虚拟对象进行速度更新后,需重新计算系统第一累积时间,如将当前的系统第一累积时间进行清零并重新计算。
[0131] 结合图5所示方法,客户端可每tick检测是否存在用户的移动控制操作;相应的,图7示出了本发明实施例提供的虚拟对象移动同步方法的又一流程图,该方法可应用于客户端,参照图7,该方法可以包括:
[0132] 步骤S400、一tick开始;
[0133] 步骤S410、判断是否检测到用户的移动控制操作,或接收到服务器发送的移动更新同步包;若检测到用户的移动控制操作,执行步骤S420,若检测到移动更新同步包,执行步骤S440,若均未检测到用户的移动控制操作和移动更新同步包,执行步骤S460;
[0134] 步骤S420、根据所述用户的移动控制操作指示的移动控制参数,以虚拟对象的当前速度进行位置更新,并将携带有所述移动控制参数的移动控制操作请求发送给服务器;
[0135] 步骤S430、重新计算系统第二累积时间,返回步骤S400;
[0136] 步骤S440、根据所述移动更新同步包对虚拟对象进行速度更新;
[0137] 步骤S450、重新计算系统第一累积时间,返回步骤S400;
[0138] 步骤S460、检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0139] 步骤S470、判断系统第一累积时间是否达到预设速度更新时间,若是,执行步骤S480,若否,返回步骤S400;
[0140] 步骤S480、对所述虚拟对象的速度进行更新,重新计算系统第一累积时间,返回步骤S400;
[0141] 步骤S490、判断系统第二累积时间是否达到预设位置更新时间,若是,执行步骤S500,若否,返回步骤S400;
[0142] 步骤S500、对所述虚拟对象的位置进行更新,重新计算系统第二累积时间,返回步骤S400。
[0143] 本发明实施例在无用户的移动控制操作和服务器发送的移动更新同步包的情况下,客户端可针对虚拟对象的速度和位置的不同更新需求,采用不同的频率进行更新;虚拟对象的速度在客户端以服务器指示的低频频率更新,即每在系统第一累积时间达到预设速度更新时间时,客户端更新一次虚拟对象的速度;虚拟对象的位置在客户端以高频频率进行更新,即每在系统第二累积时间达到预设位置更新时间时,客户端即更新一次虚拟对象的位置,且预设位置更新时间小于预设速度更新时间;
[0144] 而在有用户的移动控制操作和服务器发送的移动更新同步包时,客户端可主动即时的对虚拟对象进行速度和位置更新,保证虚拟对象速度和位置更新的及时性;
[0145] 本发明实施例可使得虚拟对象的速度和位置的更新符合实际的虚拟场景的运行需求,得到较高精确性的移动同步效果,且较大的减少了服务器的性能开销。
[0146] 可选的,作为一种替换方式,客户端可在接收到服务器发送的移动更新同步包时,对虚拟对象进行速度和位置更新;相应的,图8示出了本发明实施例提供的虚拟对象移动同步方法的又另一流程图,该方法可应用于客户端,参照图8,该方法可以包括:
[0147] 步骤S600、一tick开始;
[0148] 步骤S610、判断是否接收到服务器发送的移动更新同步包,若是,执行步骤S620,若否,执行步骤S640;
[0149] 可选的,移动更新同步包可基于用户的移动控制操作生成,如客户端检测到用户的移动控制操作后,可将相应的移动控制操作请求发送给服务器,服务器基于该移动控制操作请求更新虚拟对象的速度和位置后,可生成指示虚拟对象的更新后速度、位置、朝向、服务器更新的时间戳等信息的移动更新同步包,并发送给客户端;
[0150] 可选的,移动更新同步包也可基于虚拟对象的移动状态发生自身跳转生成,服务器在虚拟场景中检测到虚拟对象的移动状态发生自身跳转后,可更新虚拟对象的速度和位置,并生成移动更新同步包发送给客户端。
[0151] 步骤S620、根据所述移动更新同步包对虚拟对象进行速度及位置更新;
[0152] 可选的,客户端可根据移动更新同步包中指示的虚拟对象的更新后速度、位置、朝向,服务器更新的时间戳等信息,进行速度及位置更新;
[0153] 如确定客户端当前时间与服务器更新的时间戳的时间差值,基于虚拟对象的更新后速度、位置、朝向,确定虚拟对象在所述时间差值下对应的速度调整值,从而基于移动更新同步包指示的更新后速度与所述速度调整值,在客户端侧更新虚拟对象的速度;同时,基于虚拟对象的更新后速度、位置、朝向,确定虚拟对象在所述时间差值下对应的位置调整值,从而基于移动更新同步包指示的更新后位置与所述位置调整值,在客户端侧更新虚拟对象的位置;
[0154] 可选的,在客户端与服务器的网络情况良好时,客户端也可直接以移动更新同步包中指示的更新后速度,对虚拟对象进行速度更新,以移动更新同步包中指示的更新后位置,对虚拟对象进行位置更新。
[0155] 步骤S630、重新计算系统第一累积时间及系统第二累积时间,返回步骤S600;
[0156] 步骤S640、检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0157] 步骤S650、判断系统第一累积时间是否达到预设速度更新时间,若是,执行步骤S660,若否,返回步骤S600;
[0158] 步骤S660、对所述虚拟对象的速度进行更新,重新计算系统第一累积时间,返回步骤S600;
[0159] 步骤S670、判断系统第二累积时间是否达到预设位置更新时间,若是,执行步骤S680,若否,返回步骤S600;
[0160] 步骤S680、对所述虚拟对象的速度进行更新,重新计算系统第二累积时间,返回步骤S600。
[0161] 站在服务器的角度,图9示出了本发明实施例提供的虚拟对象移动同步方法的又再一流程图,该方法可应用于服务器,该服务器可以是游戏服务器,参照图9,该方法可以包括:
[0162] 步骤S700、检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0163] 其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0164] 步骤S710、服务器每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新。
[0165] 其中,预设更新时间可与前文所述的客户端所使用的预设速度更新时间一致,即服务器对虚拟对象进行速度及位置更新的频率一致,可均使用低频频率,且服务器进行速度及位置更新的频率,与客户端所使用的低频的更新速度的频率一致;且系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0166] 可选的,服务器可每n个tick检测一次系统累积时间,n优选为1;具体的,服务器可每tick检测一次距虚拟对象的上一次速度及位置更新后的系统累积时间,当检测到的系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新,并重新计算系统累积时间。
[0167] 可选的,服务器也可基于用户的移动控制操作,即时主动的进行虚拟对象的速度及位置更新;
[0168] 可选的,图10示出了本发明实施例提供的虚拟对象移动同步方法的另又一流程图,该方法可应用于服务器,参照图10,该方法可以包括:
[0169] 步骤S800、一tick开始;
[0170] 步骤S810、判断是否接收到客户端发送的移动控制操作请求,所述移动控制操作请求携带有移动控制参数,若是,执行步骤S820,若否,执行步骤S840;
[0171] 步骤S820、根据所述移动控制参数更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端;
[0172] 步骤S830、重新计算系统累积时间,返回步骤S800;
[0173] 步骤S840、判断距虚拟对象的上一次速度及位置更新后的系统累积时间,是否达到预设更新时间,若是,执行步骤S850,若否,返回步骤S800;
[0174] 步骤S850、对所述虚拟对象的速度及位置进行更新,并重新计算系统累积时间,返回步骤S800。
[0175] 可选的,服务器也可在检测到虚拟对象的移动状态发生自身跳转时,更新虚拟对象的速度及位置,并生成移动更新同步包发送给客户端;相应的,服务器可每一tick检测虚拟对象的移动状态是否发生自身跳转,若是,则更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端,同时,重新计算系统累积时间,等待下一tick到来,若否,则判断系统累积时间是否达到预设更新时间;在系统累积时间达到预设更新时间时,则对所述虚拟对象的速度及位置进行更新,并重新计算系统累积时间,等待下一tick到来;在系统累积时间未达到预设更新时间时,则等待下一tick到来。
[0176] 本发明实施例在无用户的移动控制操作请求,和无虚拟对象的移动状态发生自身跳转时,服务器可基于性能开销考虑,以相对低频的频率对虚拟对象进行速度和位置更新,即每在系统累积时间达到预设更新时间时,服务器更新一次虚拟对象的速度和位置;且服务器更新虚拟对象的速度和位置的频率,与客户端在无用户的移动控制操作和无移动更新同步包的情况下,更新虚拟对象速度的频率相同;
[0177] 而在有用户的移动控制操作请求,或虚拟对象的移动状态发生自身跳转的情况下,客户端可主动即时的对虚拟对象进行速度和位置更新,保证虚拟对象速度和位置更新的及时性;
[0178] 本发明实施例可在得到较高精确性的移动同步效果的基础上,较大的减少服务器的性能开销。。
[0179] 结合客户端和服务器的角度,图11示出了客户端和服务器的移动更新时间轴的示意图,可参照;图11中,黑色圆点表示客户端、服务器主动即时更新速度及位置的时间点,如客户端、服务器基于用户操作所引起的速度及位置更新的时间点;白色圆点表示客户端接收到移动同步包的时间点;黑色矩形点表示客户端、服务器的以低频频率进行速度更新的时间点;白色矩形点表示客户端以高频频率进行位置更新的时间点,及服务器以低频频率进行位置更新的时间点;
[0180] 在图11中,t1时刻服务器发生一次速度更新,这可能是用户操作引起的,也可能是虚拟对象的移动状态发生自身跳转引起的;服务器的速度更新需要同步到客户端,客户端可在时间轴对应的t1’时刻进行速度更新;t2时刻的情况类似。
[0181] 图12示出了游戏客户端与游戏服务器的组件示意图,参照图12,DriveIn在客户端侧用于计算系统第一累积时间和预设速度更新时间,如满足第一累积时间达到预设速度更新时间,则进行速度更新,同时,DriveIn在客户端侧还用于计算系统第二累积时间和预设位置更新时间的关系,如第二累积时间达到预设位置更新时间,则进行位置更新;DriveEnd在客户端侧和服务器侧均可用于进行位置更新,DriveBegin在客户端侧和服务器侧均可用于速度更新;客户端和服务器在DriveIn满足时,可使用同一套逻辑进行速度更新和位置更新,只是,客户端更新位置的频率是高频,而客户端更新速度的频率与服务器更新速度及位置的频率均是相同的低频;
[0182] 结合图11,DriveIn处理矩形点(黑色或白色)处的位置和速度更新;客户端在t2’时刻接收到服务器的移动更新同步包,首先计算t2’和上一次DriveIn后的这段时间的位移和速度变化,然后使用移动更新同步包中的移动参数计算最新的移动速度,这是DriveBegin的工作。在保证图中黑色圆点和黑色矩形点,服务器和客户端更新后的输出结果都是相同的情况下,那么即使白色矩形点处,客户端和服务器进行位置更新的更新频率不同,那么客户端和服务器的移动表现也是高度一致的,具有较好的移动同步效果,可得到较高精确性的移动同步效果。
[0183] 可选的,服务器对虚拟对象进行速度及位置更新的低频频率,与客户端对服务器进行位置更新的高频频率可以相差预定倍数,即服务器进行速度和位置更新的预设更新时间,可以是客户端的预设位置更新时间的预定倍数,预定倍数可以根据游戏等虚拟场景的实际运行情况定义,可选为3至8倍,优选为6倍;可选的,本发明实施例可选取预定倍数为大于3的自然数;
[0184] 以低频频率为100ms(毫秒)更新一次,高频频率为16ms更新一次为例,即预设速度更新时间与预设更新时间为100ms,预设位置更新时间为16ms;即客户端在无用户的移动控制操作和无移动同步包的情况下,可每隔16ms更新一次虚拟对象的位置,每隔100ms更新一次虚拟对象的速度,位置更新频率是速度更新频率的6倍左右;服务器在无用户的移动控制操作请求和无虚拟对象的移动状态发生自动跳转的情况下,可每隔100ms更新一次虚拟对象的速度和位置;
[0185] 可选的,服务器可以根据虚拟对象的不同需求进行低频频率的指定,如玩家控制的游戏角色的对应的低频频率为50ms,逻辑物件对应的低频频率为100ms,AI对象对应的低频频率为120ms等;
[0186] 值得注意的是,上述的具体数值仅为可选形式,并不能对本发明的保护范围造成限制。
[0187] 本发明实施例提供的虚拟对象移动同步方法可应用于游戏场景,即虚拟场景可以为游戏场景,虚拟对象为游戏对象,游戏如2D(二维)游戏,3D(三维)游戏等;现有技术中,3D游戏的游戏对象的移动同步,主要通过2D网格+高度图来模拟实现;图13示出了现有技术基于2D网格模拟的移动同步方案,从图13中可以看出,现有技术是将一个3D场景2D网格化,通过网格之间的连通性来计算移动的可通过性;这种模拟对复杂的3D场景有局限性,如并不能较好地实现游戏对象在动态阻挡等复杂情况下的移动同步;
[0188] 本发明实施例中,游戏客户端和游戏服务器均可使用Character Controller(角色控制器)来实现游戏对象在3D游戏场景中移动控制,并基于Character Controller实现游戏对象的速度和位置更新;如游戏服务器可基于Character Controller,以低频频率进行位置、速度更新,游戏服务器也可基于Character Controller,在存在移动控制操作请求或游戏对象的移动状态发生自身跳转时,进行位置、速度更新;同时,游戏客户端可基于Character Controller,以高频频率进行位置更新,并以低频频率进行的速度更新,游戏客户端也可基于Character Controller,在存在用户的移动控制操作或移动更新同步包时,进行速度、位置更新;Character Controller称为角色控制器,是一种用于3D物理世界中模拟角色体移动碰撞和交互的技术。
[0189] 本发明实施例的3D形式的虚拟场景的创建中,场景资源的配置及导出均可通过场景编辑器实现,场景编辑器是游戏等虚拟场景开发流程中开发设备所开发的一个用来编辑虚拟场景的工具,场景编辑器可供美术人员和策划人员编辑,以开发虚拟场景中使用的3D场景;场景编辑器中导出的3D场景数据最终会由客户端(如游戏客户端)和服务器(如游戏服务器)在虚拟场景运行时加载使用;
[0190] 本发明实施例中,场景编辑器的3D场景制作完成后,可向客户端(如游戏客户端)和服务器(如游戏服务器)导出相同的3D场景的地形行走层数据,3D场景中静态物件的物理碰撞数据,3D场景中动态物件的物理碰撞数据等,图14示出了场景编辑器与游戏客户端和游戏服务器的关系示意图,可参照;
[0191] 以游戏虚拟场景为例,相应的,游戏客户端可接收从场景编辑器中导出的,与游戏服务器相同接收的3D场景的地形行走层数据,3D场景中静态对象的物理碰撞数据,和3D场景中动态对象的物理碰撞数据;游戏服务器可接收从场景编辑器中导出的,与游戏客户端相同接收的3D场景的地形行走层数据,3D场景中静态对象的物理碰撞数据,和3D场景中动态对象的物理碰撞数据;
[0192] 物理碰撞数据是指从地形或者物件等有碰撞属性的对象的模型mesh数据中导出的物理刚体的数据,举例来说,比如一个箱子,它的模型就是一个长方体,由这个长方体生成的一个物理刚体作为代表这个箱子参与移动碰撞时的数据,则是物理碰撞数据;
[0193] 图15示出了3D场景中静态物件的物理碰撞数据的示意图,图16示出了3D场景中动态物件的物理碰撞数据的示意图,可参照;图15中,静态物件就是场景中不动的对象,如一块石头,静态物件的物理碰撞数据即这些静态物件参与移动碰撞时的物理碰撞数据,图15中左边的边框标了一块石头的模型,右边的边框则为这块石头对应的物理碰撞数据;图16中,动态物件即是相较静态物件会动的带有逻辑行为的对象,图16中左边的边框标了云梯的模型,右边的边框则是云梯对应的物理碰撞数据;
[0194] 地形行走层数据是指,由地表(terrain)的mesh数据生成的物理刚体数据,代表地面参与移动碰撞时的数据;图17示出了3D场景中地形行走层数据的示意图,可参照;图17中,左边的边框标了地形模型,既游戏中地形的表现,右边的边框则是地形对应的物理碰撞数据,即地形参与移动碰撞时的物理模型。
[0195] 相应的,本发明实施例在针对虚拟对象的速度和位置的不同更新需求,采用不同的频率进行速度及位置更新的基础上,可通过Character Controller进行虚拟对象的位置及速度更新,并且服务器和客户端具有场景编辑器编辑的相同的3D场景的地形行走层数据,3D场景中静态物件的物理碰撞数据,3D场景中动态物件的物理碰撞数据等;通过这样的设置,可使得本发明实施例保证移动同步效果具有较高精确性,减小服务器的性能开销,且可在3D场景中解决复杂情况下的移动同步需求,基于真实物理碰撞的3D场景实现虚拟对象的移动同步。
[0196] Character Controller在本发明实施例中,是底层模拟的虚拟对象在3D场景中移动模型,客户端和服务器是使用一样的CharacterController;基于Character Controller,本发明实施例可定义虚拟对象的移动模型,在本发明实施例中,虚拟对象的移动模型可以使用shape(胶囊体)实现,即通过shape来模拟虚拟对象的移动;本发明实施例在客户端或服务器检测到需对某一虚拟对象进行速度或位置的更新时(包括即时主动更新的情况,和周期性以低频或高频更新的情况),客户端或服务器中该虚拟对象的Character Controller可计算该虚拟对象新的速度或者位置;在每一次的速度或者位置更新中,可对虚拟对象的移动模型作linear cast(线形投射)处理,以主动查询游戏等虚拟场景的物理世界的虚拟对象的速度或位置,来更新虚拟对象的速度或位置;同时还可用状态机来维护Character Controller的移动状态逻辑;相应的,图18示出了基于Character Controller的移动模型的示意图,可参照。
[0197] 以骑砍类游戏为例,为了满足真实丰富的移动表现,同时保证整个移动模型的稳定性,本发明实施例可在Havok引擎的基础上,使用可扩展的Character Controller,对步兵和骑兵定义移动模型;以通过对步兵和骑兵的移动模型,定义不同的参数组合和设置,使得步兵的移动模型可以支持任意方向的匀速或变速直线运动,骑兵的移动模型可以支持圆周运动或变圆周运动(通过线速度模拟的角速度),并且所定义的移动模型是非对称的移动碰撞模型。相应的,图19示出了所定义的步兵移动模型,图20示出了所定义的骑兵移动模型,图21示出了线速度模拟角速度的示意图,图22示出了变圆周运动的示意图,可参照。
[0198] 基于可扩展的Character Controller,任何新的移动需求都可以在不改动客户端或服务器的移动同步底层算法的基础上,根据实际需求从所组合的移动参数中选择需要的同步到客户端,组合的移动参数如图19和图20中的方框所示参数。
[0199] 可选的,为克服复杂网络环境下,客户端与服务器间移动同步可能出现的虚拟对象移动拉拽问题,本发明实施例可在客户端侧设置缓冲时间,来降低由于网络波动造成的客户端与服务器间虚拟对象的移动不同步;
[0200] 如图23所示,Buffer Time表示缓冲时间,是服务器和客户端进行虚拟对象的移动同步的缓冲时间;Fixed Time表示稳定更新时间;Notify Delay Time表示客户端到服务器的响应延迟(由于网络情况的复杂,响应延迟动态不可预知);Server Receive Point表示客户端接收到服务器的移动更新同步包的时间点;Client Time Line是客户端时间线;Server Time Line是服务器时间线;
[0201] 在正常情况下Buffer Time是大于Notify Delay Time的,所以客户端的Server Sync Point应在Server Receive Point之后执行,这种情况是健康的,客户端与服务器针对虚拟对象的移动同步结果是最好的;但是网络环境总是复杂的,客户端与服务器的性能也千差万别,所以很有可能导致Buffer Time没有Notify Delay Time大,使得客户端执行Server Receive Point时已经过了Server Sync Point,此时客户端需要将当前的系统第一时间和系统第二时间进行更新,重新计算系统第一时间和系统第二时间;
[0202] 具体的,客户端可确定客户端与服务器间的响应延迟,如果预设的缓冲时间大于所述响应延迟,则确定虚拟对象的移动同步处理正常;如果预设的缓冲时间小于所述响应延迟,则客户端可重新计算系统第一时间和系统第二时间,保证后续移动同步的正常处理。
[0203] 可选的,由于网络不稳定等因素的存在;以服务器计算的虚拟对象的移动状态更新结果为准的网络游戏,都不可避免的会产生虚拟对象的移动拉拽现象;在此情况下,为了保证客户端本地的平滑表现,客户端可在本地所确定的虚拟对象第一更新位置,与服务器的移动更新同步包通知的虚拟对象第二更新位置相差较大时(如位置差大于预定位置差值),客户端可在设定多帧内,线性地将该虚拟对象由虚拟对象第一更新位置移动到虚拟对象第二更新位置;
[0204] 比如虚拟对象在客户端计算的更新位置为x1,服务器的移动更新同步包通知的该虚拟对象的更新位置为x2,当x2比x1大很多,位置差大于预定位置差值时,为了保证客户端表现的平滑,客户端可在未来多帧里,线性地将虚拟对象由位置x1移动到位置x2。
[0205] 可选的,本发明实施例也可采用服务器在一定程度上相信客户端的位置计算结果的方式,来进一步减小服务器性能开销;相应的,客户端可将所确定的虚拟对象的更新位置上报给服务器,服务器可确定客户端上报的虚拟对象的更新位置,与该虚拟对象在服务器中最近确定的位置的位置差,当所确定的位置差小于预定的位置阈值时,服务器可信任客户端上报的该虚拟对象的更新位置,服务器可将虚拟对象的位置更新为客户端上报的更新位置。
[0206] 发明人进过实验发现,采用本发明实施例提供的虚拟对象移动同步方法后,移动同步的开销在服务器端只占用CPU单核5%以下,单个地图服务器可以支持上千个玩家同时移动战斗;图24示出了采用本发明实施例提供的虚拟对象移动同步方法后,由于服务器的性能开销较低,且服务器与客户端间的移动同步效果的精确性较高,游戏可支持多个对象在3D场景中的移动模拟和移动同步的示意图,图中球体表示的是虚拟对象。
[0207] 下面对本发明实施例提供的客户端进行介绍,下文描述内容可与上文方法流程内容相互对应参照。
[0208] 图25为本发明实施例提供的客户端的结构框图,参照图25,该客户端可以包括:
[0209] 第一检测模块100,用于检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0210] 第一更新模块110,用于每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0211] 其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在客户端对虚拟对象每进行一次位置更新后重新计算。
[0212] 可选的,第一检测模块100可具体用于,每n个tick检测一次距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间,n为不小于1的整数。
[0213] 可选的,所述客户端还可用于,检测用户的移动控制操作,确定所述用户的移动控制操作指示的虚拟对象的移动控制参数;根据所述移动控制参数,以虚拟对象的当前速度进行位置更新;及将携带有所述移动控制参数的移动控制操作请求发送给服务器;在所述服务器根据所述移动控制参数更新虚拟对象的位置及速度后,接收服务器发送的移动更新同步包;根据所述移动更新同步包对虚拟对象进行速度更新。
[0214] 可选的,所述客户端还可用于,接收服务器发送的移动更新同步包;根据所述移动更新同步包对虚拟对象进行速度及位置更新。
[0215] 可选的,第一更新模块110在对所述虚拟对象的速度进行更新时,具体可用于,根据服务器最近一次发送的移动更新同步包,确定虚拟对象的速度更新趋势,及所述速度更新趋势对应的加速度值;根据该速度更新趋势及加速度值,进行虚拟对象的速度更新。
[0216] 可选的,第一更新模块110在对所述虚拟对象的位置进行更新时,具体可用于,确定所述虚拟对象的当前位置朝向及当前速度;以所述当前位置朝向及当前速度,进行虚拟对象的位置更新。
[0217] 可选的,客户端可基于Character Controller更新所述虚拟对象的速度和/或位置。
[0218] 可选的,客户端还可用于,基于Character Controller,定义虚拟对象的移动模型;其中,虚拟对象的移动模型使用shape实现;
[0219] 相应的,客户端在基于Character Controller更新所述虚拟对象的速度或位置时,具体可用于,在每一次对所述虚拟对象进行速度或者位置更新时,对所述虚拟对象的移动模型作linear cast处理,以主动查询游戏的物理世界中虚拟对象的速度或位置,实现更新所述虚拟对象的速度或位置。
[0220] 可选的,客户端在具体Character Controller,定义虚拟对象的移动模型时具体可用于,使用可扩展的Character Controller,对步兵和骑兵定义移动模型,以通过对步兵和骑兵的移动模型,定义不同的参数组合和设置,使得步兵的移动模型支持任意方向的匀速或变速直线运动,骑兵的移动模型支持圆周运动或变圆周运动。
[0221] 可选的,客户端还可用于,接收从场景编辑器中导出的,与服务器相同接收的3D场景的地形行走层数据,3D场景中静态对象的物理碰撞数据,和3D场景中动态对象的物理碰撞数据。
[0222] 可选的,客户端还可用于,确定客户端与服务器间的响应延迟;如果预设的缓冲时间大于所述响应延迟,则确定虚拟对象的移动同步处理正常;如果预设的缓冲时间小于所述响应延迟,则客户端重新计算系统第一时间和系统第二时间。
[0223] 可选的,客户端还可用于,在接收到服务器的移动更新同步包时,计算本地所确定的虚拟对象第一更新位置,与服务器的移动更新同步包通知的虚拟对象第二更新位置的位置差;如果所计算的位置差大于预定位置差值,在设定多帧内,线性地将所述虚拟对象由虚拟对象第一更新位置移动到虚拟对象第二更新位置。
[0224] 客户端可设置于手机、平板电脑、笔记本电脑等终端设备上,图26示出了设置有客户端的终端设备的硬件结构框图,参照图26,该终端设备可以包括:处理器1,通信接口2,存储器3和通信总线4;
[0225] 其中处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
[0226] 可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;
[0227] 处理器1,用于执行程序;
[0228] 存储器3,用于存放程序;程序中可具有客户端程序;
[0229] 程序可以包括程序代码,所述程序代码包括计算机操作指令。
[0230] 处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
[0231] 存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0232] 其中,程序可具体用于:
[0233] 检测距虚拟对象的上一次速度更新后的系统第一累积时间,及距虚拟对象的上一次位置更新后的系统第二累积时间;
[0234] 每在判断所述系统第一累积时间达到预设速度更新时间时,对所述虚拟对象的速度进行更新;及每在判断所述系统第二累积时间达到预设位置更新时间时,对所述虚拟对象的位置进行更新;
[0235] 其中,所述预设速度更新时间大于预设位置更新时间,且系统第一累积时间在客户端对虚拟对象每进行一次速度更新后重新计算,系统第二累积时间在客户端对虚拟对象每进行一次位置更新后重新计算。
[0236] 下面对本发明实施例提供的客户端进行介绍,下文描述内容可与上文方法流程内容相互对应参照。
[0237] 图27为本发明实施例提供的服务器的结构框图,参照图27,该服务器可以包括:
[0238] 第二检测模块200,用于检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0239] 第二更新模块210,用于每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0240] 可选的,第二检测模块200具体可用于,每n个tick检测一次距虚拟对象的上一次速度及位置更新后的系统累积时间,n为不小于1的整数。
[0241] 可选的,服务器还可用于,接收客户端发送的移动控制操作请求,所述移动控制操作请求携带有移动控制参数;根据所述移动控制参数更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端。
[0242] 可选的,服务器还可用于,在检测到虚拟对象的移动状态发生自身跳转时,更新虚拟对象的速度和位置,生成移动更新同步包并发送给所述客户端。
[0243] 可选的,服务器可基于角色控制器Character Controller更新所述虚拟对象的速度和/或位置;
[0244] 相应的,服务器在基于角色控制器Character Controller更新所述虚拟对象的速度或位置时,具体可用于,在每一次对所述虚拟对象进行速度或者位置更新时,对所述虚拟对象的shape作linear cast处理,以主动查询游戏的物理世界中虚拟对象的速度或位置,实现更新所述虚拟对象的速度或位置。
[0245] 可选的,服务器还可用于,接收从场景编辑器中导出的,与客户端相同接收的3D场景的地形行走层数据,3D场景中静态对象的物理碰撞数据,和3D场景中动态对象的物理碰撞数据。
[0246] 可选的,服务器还可用于,确定客户端上报的虚拟对象的更新位置,与所述虚拟对象在服务器中最近确定的位置的位置差;如果所述位置差小于预定的位置阈值,将虚拟对象的位置更新为客户端上报的更新位置。
[0247] 本发明实施例提供的服务器的硬件结构可如图26所示,包括:处理器,通信接口,存储器和通信总线;
[0248] 其中处理器,用于执行程序;
[0249] 存储器,用于存放程序;
[0250] 程序可具体用于:
[0251] 检测距虚拟对象的上一次速度及位置更新后的系统累积时间;
[0252] 每在检测到所述系统累积时间达到预设更新时间时,对所述虚拟对象的速度及位置进行更新;其中,系统累积时间在服务器对虚拟对象每进行一次速度及位置更新后重新计算。
[0253] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0254] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0255] 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0256] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。