CN116999794A - 虚拟场景的数据处理方法、装置、电子设备及存储介质 - Google Patents
虚拟场景的数据处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116999794A CN116999794A CN202211093802.2A CN202211093802A CN116999794A CN 116999794 A CN116999794 A CN 116999794A CN 202211093802 A CN202211093802 A CN 202211093802A CN 116999794 A CN116999794 A CN 116999794A
- Authority
- CN
- China
- Prior art keywords
- player character
- player
- npc
- player characters
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 32
- 238000003860 storage Methods 0.000 title claims abstract description 31
- 238000000034 method Methods 0.000 claims abstract description 83
- 238000012545 processing Methods 0.000 claims abstract description 69
- 238000012163 sequencing technique Methods 0.000 claims abstract description 7
- 230000015654 memory Effects 0.000 claims description 40
- 230000008569 process Effects 0.000 claims description 40
- 230000004044 response Effects 0.000 claims description 28
- 230000003068 static effect Effects 0.000 claims description 17
- 238000001914 filtration Methods 0.000 claims description 16
- 230000008859 change Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 8
- 238000012217 deletion Methods 0.000 claims description 7
- 230000037430 deletion Effects 0.000 claims description 7
- 238000013139 quantization Methods 0.000 claims description 6
- 239000000523 sample Substances 0.000 claims 3
- 230000003247 decreasing effect Effects 0.000 claims 2
- 239000000758 substrate Substances 0.000 claims 2
- 210000005155 neural progenitor cell Anatomy 0.000 description 68
- 238000010586 diagram Methods 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 14
- 238000012216 screening Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 230000000007 visual effect Effects 0.000 description 11
- 238000007726 management method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 7
- 230000003993 interaction Effects 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 244000025254 Cannabis sativa Species 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 101100080277 Caenorhabditis elegans ncr-1 gene Proteins 0.000 description 1
- 101100459404 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) npc-1 gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000016571 aggressive behavior Effects 0.000 description 1
- 230000003042 antagnostic effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000004575 stone Substances 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/40—Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment
- A63F13/42—Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment by mapping the input signals into game commands, e.g. mapping the displacement of a stylus on a touch screen to the steering angle of a virtual vehicle
- A63F13/426—Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment by mapping the input signals into game commands, e.g. mapping the displacement of a stylus on a touch screen to the steering angle of a virtual vehicle involving on-screen location information, e.g. screen coordinates of an area at which the player is aiming with a light gun
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/56—Computing the motion of game characters with respect to other game characters, game objects or elements of the game scene, e.g. for simulating the behaviour of a group of virtual soldiers or for path finding
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/80—Special adaptations for executing a specific game genre or game mode
- A63F13/822—Strategy games; Role-playing games
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/30—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by output arrangements for receiving control signals generated by the game device
- A63F2300/308—Details of the user interface
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/80—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game specially adapted for executing a specific type of game
- A63F2300/807—Role playing or strategy games
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Theoretical Computer Science (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种虚拟场景的数据处理方法、装置、电子设备及存储介质;方法包括:获取玩家角色在虚拟场景中的当前位置,确定包括当前位置的当前查询范围;根据当前查询范围查询基础数据库,得到与当前查询范围内待生成的多个非玩家角色对应的基础数据;确定多个非玩家角色的权重,并根据多个非玩家角色的权重进行降序排序,得到降序排序结果;将降序排序结果中从首位开始的第一数量的非玩家角色进行实例化处理,得到与第一数量的非玩家角色分别对应的第一数量的实体对象;向控制玩家角色的客户端发送第一数量的实体对象,以使客户端在当前查询范围内显示第一数量的非玩家角色对应的虚拟形象。通过本申请,能够节约服务器和终端设备的资源开销。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种虚拟场景的数据处理方法、装置、电子设备及存储介质。
背景技术
相关技术中,游戏中的所有NPC基础数据都会毫无保留地全部创建和管理,例如在得到某个NPC的基础数据后会马上实例化该NPC,然而,玩家角色在游戏进程中永远只会局限在游戏地图中很小的一个范围,因此绝大部分NPC是玩家角色目前不会有任何交互的,所以每个NPC基础数据如果都去实时实例化创建对应的实体对象,导致非常浪费服务器和终端设备的资源开销。
发明内容
本申请实施例提供一种虚拟场景的数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够有效节约服务器和终端设备的资源开销。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种虚拟场景的数据处理方法,包括:
获取玩家角色在虚拟场景中的当前位置,确定包括所述当前位置的当前查询范围;
根据所述当前查询范围查询基础数据库,得到与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据,其中,每个所述非玩家角色的基础数据包括用于对所述非玩家角色进行实例化处理的多个属性;
确定所述多个非玩家角色的权重,并根据所述多个非玩家角色的权重进行降序排序,得到降序排序结果;
将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理,得到与所述第一数量的非玩家角色分别对应的第一数量的实体对象,其中,所述第一数量小于所述多个非玩家角色的总数;
向控制所述玩家角色的客户端发送所述第一数量的实体对象,以使所述客户端在所述当前查询范围内显示所述第一数量的非玩家角色对应的虚拟形象。
本申请实施例提供一种虚拟场景的数据处理装置,包括:
非玩家角色NPC数据管理器,用于获取玩家角色在虚拟场景中的当前位置,并确定包括所述当前位置的当前查询范围;
NPC数据索引器,用于根据所述当前查询范围查询基础数据库,得到与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据,其中,每个所述非玩家角色的基础数据包括用于对所述非玩家角色进行实例化处理的多个属性;
NPC过滤筛选器,用于确定所述多个非玩家角色的权重,并根据所述多个非玩家角色的权重进行降序排序,得到降序排序结果;
NPC实例化器,用于将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理,得到与所述第一数量的非玩家角色分别对应的第一数量的实体对象,其中,所述第一数量小于所述多个非玩家角色的总数;
所述NPC实例化器,还用于向控制所述玩家角色的客户端发送所述第一数量的实体对象,以使所述客户端在所述当前查询范围内显示所述第一数量的非玩家角色对应的虚拟形象。
本申请实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的虚拟场景的数据处理方法。
本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令,用于被处理器执行时,实现本申请实施例提供的虚拟场景的数据处理方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或计算机可执行指令,用于被处理器执行时,实现本申请实施例提供的虚拟场景的数据处理方法。
本申请实施例具有以下有益效果:
根据多个非玩家角色的权重,从当前查询范围内待生成的多个非玩家角色中筛选出部分非玩家角色(例如第一数量的非玩家角色),随后对筛选出的第一数量的非玩家角色进行实例化处理,并将第一数量的实体对象发送至客户端,由于第一数量的非玩家角色是按照权重降序筛选的,保证了当前查询范围内重要的非玩家角色不会被遗漏,进而保证了玩家游戏体验的完整性,同时由于过滤掉了一部分不重要的非玩家角色,也能够节约服务器和终端设备的资源开销,同时也加快了虚拟场景的加载速度。
附图说明
图1是本申请实施例提供的虚拟场景的数据处理***100的架构示意图;
图2是本申请实施例提供的服务器200的结构示意图;
图3是本申请实施例提供的虚拟场景的数据处理方法的流程示意图;
图4A是本申请实施例提供的虚拟场景的数据处理方法的原理示意图;
图4B是本申请实施例提供的虚拟场景的数据处理方法的原理示意图;
图5是本申请实施例提供的虚拟场景的数据处理方法的流程示意图;
图6是本申请实施例提供的虚拟场景的数据处理方法的应用场景示意图;
图7是本申请实施例提供的八叉树结构示意图;
图8是本申请实施例提供的NPC生成和管理原理示意图;
图9A和图9B是本申请实施例提供的虚拟场景的数据处理方法的流程示意图;
图10是本申请实施例提供的虚拟场景的数据处理方法的应用场景示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
可以理解的是,在本申请实施例中,涉及到用户信息等相关的数据(例如玩家角色的数据),当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
在以下的描述中,所涉及的术语“第一\第二\...”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\...”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)响应于:用于表示所执行的操作所依赖的条件或者状态,当满足所依赖的条件或状态时,所执行的一个或多个操作可以是实时的,也可以具有设定的延迟;在没有特别说明的情况下,所执行的多个操作不存在执行先后顺序的限制。
2)虚拟场景:是应用程序在终端设备上运行时显示(或提供)的场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,玩家可以控制玩家角色在该虚拟场景中进行移动。
3)玩家角色(PCC,Player-Controlled Character):指游戏中由玩家操控的角色,玩家角色可以是虚拟场景中的一个虚拟的用于代表玩家的虚拟形象,例如虚拟人物、虚拟动物、动漫人物等,玩家角色在虚拟场景中具有自身的形状和体积,占据虚拟场景中的一部分空间。
4)非玩家角色(NPC,Non-Player Character):指游戏中不受玩家控制的角色,NPC一般由计算机的人工智能控制,是拥有自身行为模式的角色。可以分为剧情NPC、战斗NPC和服务NPC等,有时也会有兼具多种功能的NPC,其中,剧情NPC及服务NPC通常不属于可攻击对象,或者属于可攻击对象但不主动攻击。此外,某些NPC会掉落道具,可以为玩家提供一些游戏信息,或触发剧情。
5)生成规则:即NPC生成规则,是在游戏(例如开放世界游戏)中NPC的出现需要满足的条件(包括触发条件和规则执行条件)、以及满足条件时需要生成的NPC类型。其中,触发条件可以包括时间、玩家角色的等级等属性、规则执行条件包括位置、天气等属性,提炼抽象这些属性形成的配置化数据就是NPC生成规则。NPC生成规则的类型可以包括静态生成规则和动态生成规则,其中,静态生成规则是具有固定属性的NPC(例如向导NPC)的生成规则,动态生成规则是具有动态变化属性的NPC(例如战斗NPC)的生成规则,例如战斗NPC的攻击力会随着玩家角色的等级的提升而增加。
6)基础数据:即NPC基础数据,是从NPC生成规则提取得到的NPC的多维度的属性,例如包括种类、等级、位置、攻击力、外观等等,根据这些属性可以创建出可供游戏的NPC实体对象。
7)实例化处理:指由服务器在内存空间中分配一段存储区域,其中,存储区域的容量与需要进行实例化处理的非玩家角色的数量正相关,接着在存储区域中生成一定数量的非玩家角色对应的实体对象,其中,实体对象中的各种属性的变量存储在存储区域中。
8)感兴趣区域(AOI,Area Of Interest):与现实世界中人类能看到多远的视觉范围类似,指玩家角色在虚拟场景中实时看到的区域,AOI会随着玩家角色的移动而发生变化。在广义上,AOI***支持任何游戏世界中的对象个体对一定半径范围内发生的事件进行处理,但绝大多数情况下,只关心玩家角色的视野半径范围内发生的对象离开或者进入事件。
9)开放世界(Open World)游戏:也称为漫游式游戏(Free Roam),游戏关卡设计的一种,在其中玩家可以自由地在一个虚拟世界中漫游,并可自由选择完成游戏任务的时间点和方式。
10)四叉树(Quad Tree):又称四元树,是一种树状数据结构,可以用来在数据库中放置和定位文件(称作记录或键),其可以通过不停的把想要查找的记录分成4部分来进行匹配查找,直到仅剩下一条记录为止。
11)八叉树(Octree):一种用于描述空间的树状数据结构。八叉树的每个中间节点表示一个正方体的体积元素,每个中间节点有8个叶子节点,将8个叶子节点所表示的体积元素加在一起就等于中间节点的体积。若不为空树的话,树中任一中间节点的叶子节点的数量恰好只会有8个或者0个,也就是说叶子节点的数量不会有0与8以外的数目。
12)实体对象:指包括非玩家角色的多个不同类型的属性数据的数据集合,例如实体对象可以包括非玩家角色的外观、攻击力、等级、类型等属性数据。
相关技术中,在玩家角色注册时,服务器会实时创建所有的NPC生成规则,并将所创建的NPC生成规则存储在玩家角色身上(即与玩家角色进行绑定),完成玩家角色整个注册流程以及玩家角色所有组件初始化之后,NPC数据管理器开始工作,迭代检测玩家角色所有的NPC生成规则,如果触发了NPC生成规则,则会实时计算应该生成的NPC基础数据,接着马上实例化NPC实体对象保存到服务器内存空间,并且广播下发给客户端。
可以看出,相关技术提供的方案中,不管是玩家角色当前游戏进程需要的NPC,还是离玩家控制的角色(即玩家角色)很远的NPC,或者跟玩家角色也许永远不会有交互的NPC,都会得到创建和管理。随着玩家角色在游戏地图中的移动和状态变化,AOI相关组件会实时根据AOI范围得到其内的所有NPC,和旧AOI范围内的NPC计算差集,新出现和离开视野的NPC均会实时广播下发给客户端,但是服务器还是存储着这些NPC的实体对象。在这种方案中,NPC基础数据一生成就会实例化处理,不存在任何实例化优化策略。
然而,申请人发现:相关技术提供的方案在玩家的专属NPC数量较少,或者所有玩家共享绝大部分NPC的游戏业务场景中,具有很好的应用性,简单而且效率也不错。但是,在具有大量(例如数以千计)玩家专属NPC的游戏中(例如开放世界游戏),如果玩家角色的每个NPC基础数据都毫无保留地全部创建和管理,则会极大增加服务器和客户端的内存和处理压力,甚至很有可能对玩家的游戏体验造成很大影响。也就是说,相关技术提供的方案存在以下缺点:
(1)缺点一:注册时实时创建大量NPC生成规则和NPC基础数据,一方面会导致注册流程时间比较长,从而降低了注册并发数;另一方面也会导致服务器CPU处理峰值比较高,不稳定;
(2)缺点二:开放世界游戏中玩法丰富多彩,因此策划人员配置的NPC生成规则的数量非常多,可能有数千条,然而,很多NPC生成规则只在玩家创建账号的伊始才起作用,此后不会发生任何变更,此外,各个NPC生成规则的触发条件也各不相同,因此,实时迭代检测玩家所有的NPC生成规则十分耗时耗力,且没有必要;
(3)缺点三:生成NPC基础数据后马上就实例化该NPC,然而,玩家角色在游戏进程中永远只会局限在开放世界中很小的一个范围,因此开放世界中的绝大多数NPC,玩家角色是目前不会有任何交互的,所以每个NPC基础数据如果都去实例化创建对应的实体对象,导致非常浪费服务器和客户端的内存空间和CPU处理能力。
鉴于此,本申请实施例提供一种虚拟场景的数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够节约服务器和终端设备的资源开销。下面说明本申请实施例提供的电子设备的示例性应用,本申请实施例提供的电子设备可以实施为服务器,或者由终端设备和服务器协同实施。
下面以由终端设备和服务器协同实施本申请实施例提供的虚拟场景的数据处理方法为例进行说明。
参见图1,图1是本申请实施例提供的虚拟场景的数据处理***100的架构示意图,为实现支撑一个有效节约服务器和终端设备的资源开销的应用,如图1所示,虚拟场景的数据处理***100包括:服务器200、网络300和终端设备400,其中,终端设备400通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
在一些实施例中,终端设备400上运行有客户端410,客户端410可以是各种类型的游戏应用,例如开放世界游戏应用,射击类游戏应用,策略类游戏应用等,在客户端410的人机交互界面中显示有虚拟场景,客户端410可以通过网络300将玩家角色在虚拟场景中的当前位置发送至服务器200。服务器200在接收到客户端410发送的玩家角色在虚拟场景中的当前位置之后,首先确定包括当前位置的当前查询范围,并根据当前查询范围查询基础数据库,得到与当前查询范围内待生成的多个非玩家角色(例如100个NPC)分别对应的基础数据;接着服务器200确定多个非玩家角色的权重,并根据多个非玩家角色的权重进行降序排序,得到降序排序结果;随后服务器200将降序排序结果中从首位开始的第一数量(例如50)的非玩家角色进行实例化处理,得到与第一数量的非玩家角色分别对应的第一数量的实体对象(例如从100个NPC中过滤筛选出权重排序靠前的50个NPC进行实例化处理);最后,服务器200向终端设备400发送第一数量的实体对象,以使客户端410基于服务器200发送的第一数量的实体对象渲染出第一数量的非玩家角色分别对应的虚拟形象,从而在当前查询范围内显示第一数量的非玩家角色对应的虚拟形象,供玩家进行互动,如此,通过有效控制进行实例化处理的非玩家角色的数量,在不影响玩家的游戏体验的前提下,可以有效节约服务器和终端设备的资源开销。
在另一些实施例中,本申请实施例还可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络***的后台服务需要大量的计算、存储资源。
示例的,图1中的服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,ContentDelivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、车载终端等,但并不局限于此。终端设备400以及服务器200可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
下面继续对图1中示出的服务器200的结构进行说明。参见图2,图2是本申请实施例提供的服务器200的结构示意图,图2所示的服务器200包括:至少一个处理器210、存储器240、至少一个网络接口220。服务器200中的各个组件通过总线***230耦合在一起。可理解,总线***230用于实现这些组件之间的连接通信。总线***230除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线***230。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
存储器240可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器240可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器240包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器240旨在包括任意适合类型的存储器。
在一些实施例中,存储器240能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作***241,包括用于处理各种基本***服务和执行硬件相关任务的***程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块242,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图2示出了存储在存储器240中的虚拟场景的数据处理装置243,其可以是程序和插件等形式的软件,包括以下软件模块:NPC数据管理器2431、NPC数据索引器2432、NPC过滤筛选器2433、NPC实例化器2434、NPC数据预创建器2435和NPC生成规则配置预处理器2436,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。需要指出的是,在图2中为了方便表达,一次性示出了上述所有模块,但是不应视为在虚拟场景的数据处理装置243排除了可以只包括NPC数据管理器2431、NPC数据索引器2432、NPC过滤筛选器2433和NPC实例化器2434的实施,将在下文中说明各个模块的功能。
下面将结合本申请实施例提供的服务器的示例性应用和实施,对本申请实施例提供的虚拟场景的数据处理方法进行具体说明。
参见图3,图3是本申请实施例提供的虚拟场景的数据处理方法的流程示意图,将结合图3示出的步骤进行说明。
在步骤101中,获取玩家角色在虚拟场景中的当前位置,确定包括当前位置的当前查询范围。
在一些实施例中,服务器在接收到客户端发送的玩家角色在虚拟场景中的当前位置之后,可以通过以下方式确定包括当前位置的当前查询范围:将基于当前位置的第一人称视角或第三人称视角的视野(即感兴趣区域,其大小等于玩家角色的视野大小),确定为包括当前位置的当前查询范围;或者,将以当前位置为中心的设定尺寸的几何区域(例如圆形、矩形等),确定为包括当前位置的当前查询范围。
示例的,以玩家角色为游戏角色A为例,客户端在获取到游戏角色A在虚拟场景中的当前位置(例如位置1)之后,可以将位置1发送至服务器,以使服务器确定包括位置1的当前查询范围,例如服务器可以将以位置1为中心的半径为2的圆形,确定为包括位置1的当前查询范围。
在另一些实施例中,服务器也可以将大于以当前位置为中心的视野的区域(例如矩形、圆形等),确定为包括当前位置的当前查询范围,例如服务器可以将大于玩家角色的视野的矩形,确定为包括当前位置的当前查询范围,如此,可以有效减少玩家角色在虚拟场景中移动时的查询次数,进而节约了终端设备和服务器的通信资源和计算资源。当然,当前查询范围也可以是根据玩家角色的移动特性进行个性化计算的,例如在以往的游戏过程中,针对移动范围越大的游戏角色,其对应的当前查询范围也越大,如此,可以满足不同玩家的个性化需求。
在步骤102中,根据当前查询范围查询基础数据库,得到与当前查询范围内待生成的多个非玩家角色分别对应的基础数据。
这里,每个非玩家角色的基础数据包括用于对非玩家角色进行实例化处理的多个属性,其中,属性的类型可以包括:等级、种类、位置、攻击力、外观等。
在一些实施例中,基础数据库可以通过多叉数(例如四叉树或者八叉树)结构存储虚拟场景中的所有非玩家角色的基础数据,其中,多叉数结构包括:一个顶层节点,代表虚拟场景;多个中间节点,每个中间节点代表虚拟场景中的一个空间,该空间包括下属的多个子空间的索引;多个叶子节点,每个叶子节点代表所归属的中间节点(所代表的空间)中的一个子空间,该子空间包括位于该子空间中的非玩家角色的基础数据,则服务器可以通过以下方式实现上述的步骤102:根据当前查询范围查询多叉数结构,得到多叉树结构中被当前查询范围覆盖的至少一个中间节点;查询被覆盖的每个中间节点包括的每个叶子节点,将查询到的多个非玩家角色分别对应的基础数据,作为与当前查询范围内待生成的多个非玩家角色分别对应的基础数据。
示例的,以八叉树结构为例,服务器在确定出包括当前位置的当前查询范围之后,可以根据当前查询范围查询八叉树结构,得到八叉树结构中被当前查询范围覆盖的至少一个中间节点,假设八叉树结构中的中间节点1和中间节点2被当前查询范围覆盖,接着服务器可以分别查询中间节点1和中间节点2包括的每个叶子节点,例如假设中间节点1包括叶子节点1(假设存储有非玩家角色1的基础数据)和叶子节点2(假设存储有非玩家角色2的基础数据),中间节点2包括叶子节点3(假设存储有非玩家角色3的基础数据)和叶子节点4(假设存储有非玩家角色4的基础数据),并将查询到的多个非玩家角色(即非玩家角色1、非玩家角色2、非玩家角色3和非玩家角色4)分别对应的基础数据,确定为与当前查询范围内待生成的多个非玩家角色分别对应的基础数据。
在一些实施例中,承接上述示例,非玩家角色的基础数据可以是从非玩家角色的生成规则提取的(例如非玩家角色1的基础数据是从动态生成规则1提取的),其中,生成规则的类型包括静态生成规则(即具有固定属性的非玩家角色的生成规则,例如游戏中的向导NPC的生成规则,向导NPC的属性在游戏过程中是不会发生变化的)和动态生成规则(即具有动态变化属性的非玩家角色的生成规则,例如游戏中的战斗NPC的生成规则,战斗NPC的攻击力会随着游戏的进行不断增大),且动态生成规则是存储于规则数据库中的,则在玩家角色处于虚拟场景的过程中时,服务器还可以执行以下处理:响应于规则数据库中的任一动态生成规则(例如动态生成规则1)过期,从基础数据库中删除从任一动态生成规则提取的基础数据(例如当检测到规则数据库中的动态生成规则1过期时,服务器可以从基础数据库中删除从动态生成规则1提取的非玩家角色1的基础数据);响应于多叉树结构的任一中间节点代表的多个(即至少2个)子空间中的至少部分基础数据被删除,且多个子空间中剩余的基础数据的数据量小于数据量阈值(例如10比特),将多个子空间合并为1个叶子节点。
在另一些实施例中,非玩家角色的基础数据可以是从非玩家角色的生成规则提取的(例如以向导NPC为例,向导NPC的基础数据可以是从静态生成规则1提取的),其中,生成规则的类型可以包括静态生成规则和动态生成规则,且动态生成规则是存储于规则数据库中的,则在玩家角色处于虚拟场景的过程中时,服务器还可以执行以下处理:响应于规则数据库中的任一动态生成规则包括的任意一个规则执行条件被满足,从任一动态生成规则提取非玩家角色对应的基础数据;将提取的非玩家角色的基础数据存入多叉树结构中的目标叶子节点(例如多叉树结构中的叶子节点4),其中,提取的非玩家角色的基础数据包括非玩家角色在虚拟场景中的位置,且非玩家角色的位置属于目标叶子节点的子空间;响应于目标叶子节点的数据量达到(即大于或等于)数据量阈值,将目标叶子节点转换为新的中间节点,并将目标叶子节点中存储的基础数据转移到新的中间节点下属的两个新的叶子节点。
示例的,以动态生成规则1为例,假设动态生成规则1为“当玩家角色的等级达到10级、且玩家角色到达虚拟场景中的草地时,在虚拟场景的位置A生成一个攻击力为100、等级为10级、种类为草系的NPC1”,则当服务器检测到规则数据库中的动态生成规则1包括的任意一个规则执行条件被满足(例如检测到等级为10级的玩家角色到达虚拟场景中的草地)时,可以从动态生成规则1提取NPC1对应的基础数据(例如NPC1的位置、攻击力、等级、种类等),并将所提取的NPC1的基础数据存入多叉树(例如八叉树)结构中的目标叶子节点(例如八叉树结构的叶子节点4),其中,NPC1的位置属于叶子节点4的子空间;随后当服务器检测到叶子节点4的数据量大于数据量阈值(例如10比特)时,可以将叶子节点4转换为新的中间节点,并将叶子节点4中存储的基础数据转移到新的中间节点下属的两个新的叶子节点。
在步骤103中,确定多个非玩家角色的权重,并根据多个非玩家角色的权重进行降序排序,得到降序排序结果。
在一些实施例中,服务器可以通过以下方式确定多个非玩家角色的权重:针对多个非玩家角色中的每个非玩家角色执行以下处理:对非玩家角色的至少一个维度的状态进行量化处理,对应得到至少一个量化值;当至少一个量化值的数量为一个时,将该量化值确定为该非玩家角色的权重;当至少一个量化值的数量为多个时,对多个量化值进行加权求和处理,将得到的加权求和结果确定为该非玩家角色的权重,其中,状态的类型可以包括以下至少之一:非玩家角色与玩家角色之间的地理位置关系,其中,地理位置关系可以包括非玩家角色与玩家角色之间的距离(指虚拟场景的地图中所跨越的二维或者三维的直线长度)、方位(例如当非玩家角色位于玩家角色的正前方时,对应的量化值可以为1,当非玩家角色位于玩家角色的后方时,对应的量化值可以为0)、朝向(例如当非玩家角色面向玩家角色时,对应的量化值可以为1,当非玩家角色背向玩家角色时,对应的量化值可以为0)等、非玩家角色是否与玩家角色处于同一个队伍、非玩家角色与玩家角色之间的社交关系、非玩家角色与玩家角色之间是否具有对抗关系、非玩家角色是否在玩家角色的历史视野中出现。
下面以基于非玩家角色的多个维度的状态确定该玩家角色的权重为例进行说明。
示例的,针对每个非玩家角色,服务器可以通过以下方式实现上述的基于非玩家角色的状态,确定非玩家角色的权重:分别对距离(例如可以将非玩家角色与玩家角色之间的距离与设定距离的相除结果,确定为对应的量化值,例如假设非玩家角色与玩家角色之间的距离为7,设定距离为10,则对应的量化值为0.7)、是否处于同一个队伍(例如当非玩家角色与玩家角色处于同一个队伍时,对应的量化值可以为1;当非玩家角色与玩家角色没有处于同一个队伍时,对应的量化值可以为0)、社交关系(例如当非玩家角色与玩家角色具有社交关系时,对应的量化值可以为1;当非玩家角色与玩家角色不具有社交关系时,对应的量化值可以为0)、是否具有对抗关系(例如当非玩家角色与玩家角色之间具有对抗关系时,对应的量化值可以为1;当非玩家角色与玩家角色之间不具有对抗关系时,对应的量化值可以为0)、以及是否在历史视野中出现(例如当非玩家角色曾经在玩家角色的历史视野中出现时,对应的量化值可以为1;当非玩家角色没有在玩家角色的历史视野中出现时,对应的量化值可以为0)进行量化处理,对应得到多个量化值;对多个量化值进行加权求和处理,将得到的加权求和结果确定为非玩家角色的权重。
举例来说,以非玩家角色1为例,假设非玩家角色1与玩家角色之间的距离为8、非玩家角色1与玩家角色处于同一个队伍、非玩家角色1与玩家角色不具有好友关系、非玩家角色1与玩家角色之间具有对抗关系(例如玩家角色曾经攻击过非玩家角色1,导致非玩家角色1与玩家角色之间具有仇恨)、非玩家角色1在玩家角色的历史视野中出现过,则服务器对非玩家角色1的上述多个维度的状态进行量化处理后,可以对应得到多个量化值,分别为0.8、1、0、1、1,接着服务器可以对多个量化值进行加权求和处理,将得到的加权求和结果(例如假设每个量化值对应的权重值均为0.5,则加权求和结果为:0.5×0.8+0.5×1+0.5×0+0.5×1+0.5×1=1.9)确定为非玩家角色1的权重(即非玩家角色1的权重为1.9)。当然,不同量化值对应的权重值也可以是不同的,例如针对每个量化值,可以由策划人员分别配置对应的权重值,本申请实施例对此不做具体限定。
在步骤104中,将降序排序结果中从首位开始的第一数量的非玩家角色进行实例化处理,得到与第一数量的非玩家角色分别对应的第一数量的实体对象。
这里,第一数量小于多个非玩家角色的总数,例如假设多个非玩家角色的总数为100,则第一数量可以是80。
需要说明的是,第一数量可以是固定值(例如80),也可以是根据玩家角色的当前查询范围所在区域的类型变化而动态变化的,即当玩家角色处于不同类型的区域时,第一数量的取值也是不同的,下面针对第一数量为动态值的情况进行具体说明。
在一些实施例中,服务器在将降序排序结果中从首位开始的第一数量的非玩家角色进行实例化处理之前,还可以执行以下处理:根据当前查询范围所在区域的类型,采用与类型对应的调整方式对多个非玩家角色的权重进行调整;将经过调整后的多个非玩家角色中权重超过权重阈值的至少一个非玩家角色,确定为第一数量的非玩家角色。
示例的,当当前查询范围所在的区域为虚拟场景中的竞技场、城镇等公共区域时,由于玩家在竞技场、城镇等公共区域中有着较强的交互需求,因此可以增大当前查询范围内的多个非玩家角色的权重,例如可以将多个非玩家角色的权重与大于1的系数(例如1.5)进行相乘,从而使得超过权重阈值的非玩家角色(即需要进行实例化处理的非玩家角色)的数量增加(例如假设权重阈值为1,同时假设NPC1的权重为0.8,即NPC1调整前的权重是小于权重阈值的,在对NPC1的权重进行调整之后,NPC1的权重变成1.2,大于权重阈值,则可以对NPC1进行实例化处理),以在客户端中显示更多的非玩家角色供玩家进行交互。
示例的,当当前查询范围所在的区域为虚拟场景中的玩家角色的住宅、训练场等私人区域时,由于玩家在私人区域中交互需求较弱,因此可以减小当前查询范围内的多个非玩家角色的权重,例如可以将多个非玩家角色的权重与小于1的系数(例如0.7)进行相乘,从而使得超过权重阈值的非玩家角色(即需要进行实例化处理的非玩家角色)的数量减少,以在客户端中显示更少的非玩家角色,从而在满足玩家需求的前提下,进一步降低服务器和终端设备的资源开销。
在一些实施例中,第一数量也可以是根据服务器的负载动态确定的,则服务器在将降序排序结果中从首位开始的第一数量的非玩家角色进行实例化处理之前,还可以执行以下处理:通过执行以下处理之一确定第一数量:将服务器当前的负载与设定的参考负载进行比较;其中,参考负载是通过预设值进行标定的;当服务器当前的负载低于参考负载时,对预设值增大预定数量或比例,并将增大后的预设值确定为第一数量;当服务器当前的负载高于参考负载时,对预设值减小预定数量或比例,并将减小后的预设值确定为第一数量;在预先设置的多个参考负载区间中,确定服务器当前的负载所处的区间,并将区间对应的实例化数量确定为第一数量,其中,不同的参考负载区间对应不同的实例化数量。
示例的,可以首先根据以往的实例化数量,确定一个预设值(例如可以将以往多个实例化数量的平均值确定为预设值),并根据预设值(例如假设为50)标定一个参考负载,接着可以通过服务器负载检测器提供的接口获取服务器的负载情况;当服务器当前的负载低于参考负载时,说明服务器当前的压力较小,则可以对预设值增大预定数量(例如5)或者比例(例如10%),并将增大后的预设值(即55)确定为第一数量;当服务器当前的负载高于参考负载时,说明服务器当前的压力较大,则可以对预设值减小预定数量(例如5)或者比例(例如10%),并将减小后的预设值(即45)确定为第一数量,如此,既充分平衡了服务器的负载,利用了服务器的能力,又不会影响玩家的游戏体验。
示例的,也可以预先设置多个参考负载区间,其中,每个参考负载区间对应一个实例化数量,例如可以预先设置5个参考负载区间,分别为参考负载区间1(0%-20%)、参考负载区间2(20%-40%)、参考负载区间3(40%-60%)、参考负载区间4(60%-80%)和参考负载区间5(80%-100%),其中,参考负载区间1对应的实例化数量为100、参考负载区间2对应的实例化数量为80、参考负载区间3对应的实例化数量为60、参考负载区间4对应的实例化数量为40、参考负载区间5对应的实例化数量为20,接着可以通过服务器负载检测器提供的接口获取服务器的负载情况,假设服务器当前的负载为50%,即服务器当前的负载处于参考负载区间3,则可以将参考负载区间3对应的实例化数量(即60)确定为第一数量。
在另一些实施例中,第一数量也可以是固定值(例如50),或者是多个非玩家角色的总数的固定比例(例如60%),本申请实施例对此不做具体限定。
在一些实施例中,服务器可以通过以下方式实现上述的步骤104:在内存空间中分配存储区域;在存储区域中生成第一数量的非玩家角色分别对应的实体对象,其中,实体对象包括代表非玩家角色的属性的变量。
示例的,在对当前查询范围内待生成的多个非玩家角色(例如20个非玩家角色)进行过滤筛选,得到第一数量的非玩家角色(例如10个非玩家角色)之后,服务器可以在内存空间中分配一段存储区域(存储区域的大小与第一数量正相关),接着服务器可以在所分配的存储区域中生成10个非玩家角色分别对应的实体对象,并在内存空间中记录这10个非玩家角色的属性(例如攻击力、外观、位置、等级等)的变量,如此,对于当前查询范围内待生成的多个NPC,进行过滤筛选得到权重排在头部区间的部分NPC,并对筛选得到的部分NPC进行实例化处理,有效控制了NPC实体对象的数量,在不影响玩家的游戏体验的前提下,还能极大节省客户端和服务器的资源开销。
在步骤105中,向控制玩家角色的客户端发送第一数量的实体对象,以使客户端在当前查询范围内显示第一数量的非玩家角色对应的虚拟形象。
这里,客户端在接收到服务器发送的第一数量的实体对象之后,可以基于第一数量的实体对象,渲染出第一数量的非玩家角色分别对应的虚拟形象,例如客户端可以基于NPC1的实体对象包括的外观数据,渲染出NPC1的虚拟形象,以在当前查询范围内进行显示。
为表述方便,下文中简称为显示非玩家角色对应的实体对象,可以理解的是,下文中记载的“显示非玩家角色对应的实体对象”即指“显示基于实体对象渲染得到的非玩家角色对应的虚拟形象”。
在一些实施例中,服务器在向控制玩家角色的客户端发送第一数量的实体对象之前,还可以执行以下处理:比较当前查询范围与历史查询范围,其中,历史查询范围是包括历史位置的查询范围,历史位置是玩家角色在当前位置之前在虚拟场景中所处的位置(例如假设玩家角色从虚拟场景中的位置1移动至位置2,则位置1为历史位置,位置2为当前位置);响应于当前查询范围与历史查询范围完全不同,转入执行向控制玩家角色的客户端发送第一数量的实体对象的处理;响应于当前查询范围与历史查询范围存在交叉区域,向控制玩家角色的客户端发送其他非玩家角色(即第一数量的非玩家角色中位于交叉区域以外的非玩家角色)对应的实体对象,以使客户端继续显示交叉区域中的非玩家角色对应的实体对象、以及其他区域(即当前查询范围中除交叉区域外的区域)中的非玩家角色对应的实体对象;响应于历史查询范围相对于当前查询范围存在差异区域,向控制玩家角色的客户端发送通知消息,其中,通知消息用于通知客户端删除差异区域中的非玩家角色对应的实体对象。
示例的,参见图4A,图4A是本申请实施例提供的虚拟场景的数据处理方法的原理示意图,如图4A所示,在虚拟场景400中显示有玩家角色401,假设玩家角色401从虚拟场景400中的历史位置402(例如虚拟场景中的位置1)移动至当前位置403(例如虚拟场景中的位置2),且包括历史位置402的历史查询范围404与包括当前位置403的当前查询范围405完全不同(即历史查询范围404和当前查询范围405没有重叠),则服务器可以向控制玩家角色401的客户端发送第一数量的实体对象,以使客户端在当前查询范围405内显示第一数量的非玩家角色对应的实体对象。同时,服务器还可以向控制玩家角色401的客户端发送通知消息,以使客户端删除历史查询范围404中的非玩家角色对应的实体对象,如此,可以有效节约终端设备宝贵的内存资源。
示例的,参见图4B,图4B是本申请实施例提供的虚拟场景的数据处理方法的原理示意图,如图4B所示,在虚拟场景400中显示有玩家角色401,假设玩家角色401从虚拟场景400中的历史位置402移动至当前位置403,且包括历史位置402的历史查询范围404与包括当前位置403的当前查询范围405之间存在交叉区域406(即图4B中示出的阴影区域),则服务器可以仅向控制玩家角色401的客户端发送第一数量的非玩家角色中位于交叉区域406之外的部分非玩家角色对应的实体对象,以使客户端继续显示交叉区域406中的非玩家角色(即旧非玩家角色)对应的实体对象、以及其他区域407(即当前查询范围405减去交叉区域406后得到的区域)中的非玩家角色(即玩家角色401移动至当前位置403后新出现的非玩家角色)对应的实体对象。同时,服务器还可以向客户端发送通知消息,以使客户端删除差异区域408(即历史查询范围404减去交叉区域406后得到的区域)中的非玩家角色对应的实体对象,如此,一方面可以提高非玩家角色对应的实体对象的显示效率,另一方面也能够节约服务器和终端设备的通信资源和计算资源。
在另一些实施例中,承接上述示例,服务器在向控制玩家角色的客户端发送通知消息之前,还可以执行以下处理:针对位于差异区域中的每个非玩家角色执行以下处理:在基础数据库中增加一个新的字段,将非玩家角色对应的实体对象的状态数据(例如非玩家角色当前的生命值、魔法值、所具有的技能等)存储至新的字段中。
示例的,以基础数据库是通过多叉树结构存储虚拟场景中的所有非玩家角色的基础数据为例,其中,多叉树结构的叶子节点1中存储有非玩家角色1的基础数据、叶子节点2中存储有非玩家角色2的基础数据、叶子节点3中存储有非玩家角色3的基础数据,同时假设差异区域中存在3个非玩家角色,分别为非玩家角色1、非玩家角色2和非玩家角色3,则服务器可以将非玩家角色1对应的实体对象的状态数据存储至叶子节点1中,将非玩家角色2对应的实体对象的状态数据存储至叶子节点2中,将非玩家角色3对应的实体对象的状态数据存储至叶子节点3中,如此,当需要再次显示差异区域中的非玩家角色对应的实体对象时,可以根据存储的状态数据准确无误地创建出来。
在一些实施例中,参见图5,图5是本申请实施例提供的虚拟场景的数据处理方法的流程示意图,如图5所示,在执行完图3示出的步骤105之后,还可以执行图5示出的步骤106,将结合图5示出的步骤进行说明。
在步骤106中,响应于玩家角色离开当前查询范围后再次返回当前查询范围,向客户端发送其他非玩家角色的实体对象。
这里,其他非玩家角色为当前查询范围中除第一数量的非玩家角色之外的非玩家角色。
在一些实施例中,以当前查询范围为虚拟场景中的感兴趣区域1为例,假设感兴趣区域1中总存在20个非玩家角色,当玩家角色首次进入感兴趣区域1时,服务器可以先向控制玩家角色的客户端发送第一数量(例如10)的非玩家角色(例如降序排序结果中从首位开始的10个非玩家角色)分别对应的实体对象,以使客户端在感兴趣区域1中显示10个非玩家角色的实体对象;随后当玩家角色离开感兴趣区域1后再次返回感兴趣区域1,服务器可以对剩余的10个非玩家角色(即降序排序结果中排在后10位的非玩家角色)进行实例化处理,并向客户端发送剩余的10个非玩家角色的实体对象(即当玩家角色再次进入相同的AOI时,服务器可以将之前缺失的NPC的实体对象下发到客户端),以使客户端在感兴趣区域1中显示剩余的10个非玩家角色的实体对象,从而保证了玩家游戏体验的完整性。
在一些实施例中,在基础数据库中存储有每个非玩家角色的基础数据,在规则数据库中存储有与每个非玩家角色对应的生成规则,且生成规则的类型均为动态生成规则,其中,动态生成规则是具有动态变化属性的非玩家角色的生成规则,每个动态生成规则包括多个规则执行条件(例如包括位置条件、天气条件等),且当不同的规则执行条件被满足时,从动态生成规则提取得到的基础数据不同,则当玩家角色处于虚拟场景的过程中时,服务器还可以执行以下处理:通过以下方式更新基础数据库:对规则数据库中存储的每个动态生成规则进行过期检查;响应于规则数据库中出现过期的动态生成规则(例如动态生成规则1),删除基础数据库中从过期的动态生成规则提取的基础数据、以及从规则数据库中删除过期的动态生成规则(例如假设服务器检测到规则数据库中的动态生成规则1过期,则可以删除基础数据库中从动态生成规则1提取的基础数据,例如NPC1的基础数据,同时服务器还可以从规则数据库中删除动态生成规则1);响应于规则数据库中的任一动态生成规则(例如动态生成规则2)包括的规则执行条件被满足,从任一动态生成规则提取新的基础数据,并将基础数据库中与任一动态生成规则对应的原有的基础数据替换为新的基础数据,例如以动态生成规则2为例,假设动态生成规则2为:“当虚拟场景中的天气为晴天时,在虚拟场景的位置A生成一个攻击力为20、等级为3级的NPC1;当天气从晴天转换为雨天时,NPC1的攻击力将从20增大至40”,则当服务器检测到动态生成规则2包括的规则执行条件被满足(例如检测到虚拟场景中的天气从晴天转换为雨天)时,可以从动态生成规则2提取NPC1新的基础数据(例如攻击力为40),并将基础数据库中与动态生成规则2对应的原有的基础数据(例如攻击力为20)替换为新的基础数据。
在另一些实施例中,承接上述示例,每个动态生成规则还包括解锁条件(例如包括等级条件、时间条件等);则在玩家角色处于虚拟场景的过程中时,服务器还可以执行以下处理:通过以下方式更新规则数据库:响应于规则数据库中的任一动态生成规则满足规则删除条件(例如动态生成规则对应的非玩家角色被删除),将任一动态生成规则作为过期的动态生成规则,并从规则数据库中删除过期的动态生成规则,例如当服务器检测到虚拟场景中的某种类型的NPC被删除(例如随着游戏版本的更新,某种类型的NPC被游戏开发人员从游戏中移除)时,则服务器可以将该类型的NPC对应的动态生成规则作为过期的动态生成规则,并从规则数据库中删除过期的动态生成规则;响应于全量数据库中的任一动态生成规则包括的解锁条件被满足(例如玩家角色的等级达到玩家阈值,例如10级),将任一动态生成规则作为新解锁的动态生成规则存入规则数据库中,如此,针对注册之后属性再也不会变化的NPC(例如向导NPC)对应的生成规则(即静态生成规则),只存储从中提取的NPC基础,对于生成规则本身则不再存储,因此不再会被检测;而针对游戏进程中属性(例如攻击力、等级等)可能发生变化的NPC(例如战斗NPC)对应的生成规则(即动态生成规则),可以根据解锁条件的类型(例如等级、时间等)进行分类,这样在某个条件发生变化时只需要检查包括该类条件的生成规则即可,从而实现精准检测。
示例的,以解锁条件为等级条件为例,全量数据库中存储的动态生成规则可以包括等级条件,例如以动态生成规则1为例,动态生成规则1可以是“当玩家角色的等级达到5级时,在虚拟场景的位置A生成一个攻击力为30、等级为5级的NPC1”,则当服务器检测到玩家角色的等级达到5级时,可以将动态生成规则1作为新解锁的动态生成规则存入规则数据库中。
示例的,以解锁条件为时间条件为例,全量数据库中存储的动态生成规则可以包括时间条件,例如以动态生成规则2为例,动态生成规则2可以是“当游戏时间达到30分钟时,在虚拟场景的位置B生成一个攻击力为50、等级为6级的NPC2”,则当服务器检测到玩家的游戏时长达到30分钟时,可以将动态生成规则2作为新解锁的动态生成规则存入规则数据库中。
在另一些实施例中,服务器在获取玩家角色在虚拟场景中的当前位置之前,还可以执行以下处理:在玩家角色的注册阶段,通过以下方式初始化规则数据库和基础数据库:从全量数据库中获取全部生成规则;将全部生成规则分类为静态生成规则和动态生成规则;从静态生成规则提取具有固定属性的非玩家角色(例如向导NPC)对应的基础数据,从动态生成规则提取具有动态变化属性的非玩家角色(例如战斗NPC)对应的基础数据,并将所提取的基础数据(包括具有固定属性的非玩家角色的基础数据、以及具有动态变化属性的非玩家角色的基础数据)存入基础数据库中;将对全部生成规则进行分类得到的动态生成规则存入规则数据库中。
在一些实施例中,还可以根据玩家角色在注册阶段的等级,对基础数据库中存储的非玩家角色的基础数据包括的某些属性(例如攻击力、等级等)进行修正,以等级为例,例如假设玩家角色在注册阶段的等级为1级,则可以将基础数据库中存储的基础数据包括的非玩家角色的等级修正为1级,例如以NPC1为例,假设基础数据库中存储的NPC1的基础数据中NPC1的等级为3级,则可以根据玩家角色的等级将NPC1的等级也修正成1级,从而使非玩家角色的等级与玩家角色的等级适配。
在另一些实施例中,承接上述示例,在从全量数据库中获取全部生成规则之前,服务器还可以执行以下处理:在初始化阶段,获取策划人员针对虚拟场景配置的全部生成规则,其中,初始化阶段包括以下至少之一:服务器的启动阶段,服务器的负载低于负载阈值的阶段;基于全部生成规则,确定在虚拟场景中需要生成的非玩家角色的类型;从全部生成规则提取每个类型的非玩家角色的基础数据,并将所提取的每种类型的非玩家角色的基础数据、以及全部生成规则存入全量数据库中,如此,在服务器启动或者空闲时预先创建所有的NPC生成规则和NPC基础数据,供玩家注册时直接取用,无需注册时实时创建,有效降低了注册时长和服务器的CPU峰值。
本申请实施例提供的虚拟场景的数据处理方法,在得到当前查询范围内待生成的多个非玩家角色的基础数据之后,根据多个非玩家角色的权重,从当前查询范围内待生成的多个非玩家角色中过滤筛选出部分非玩家角色(例如第一数量的非玩家角色),随后对过滤筛选出的第一数量的非玩家角色进行实例化处理,并将第一数量的实体对象发送至客户端,如此,有效控制了在客户端中显示的非玩家角色对应的实体对象的数量,从而在不影响玩家的游戏体验的前提下,有效节省了服务器和终端设备的资源开销。
下面,以开放世界游戏为例说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例提供了一种虚拟场景的数据处理方法,可以应用于单人开放世界游戏,实现对游戏中大量NPC基础数据的生成和管理、NPC实体对象的创建、维护以及对于玩家角色的可见性管理。本申请实施例提供的方案将NPC实体对象的创建过程分为两段式:基础数据生成(即刷新生成过程)和实体对象创建(即实例化过程)。在刷新生成过程中,由NPC数据管理器根据NPC生成规则,在游戏过程中生成和管理NPC基础数据。在实例化过程中,则由NPC实例化器从NPC数据管理器中得到指定范围(对应于上述的当前查询范围)内所有NPC基础数据,然后采用NPC过滤筛选器基于权重筛选出优先级最高的一批NPC基础数据创建对应的NPC实体对象,并且下发给客户端进行显示。本申请实施例提供的方案中,模块化程度高,抽象性好,能够很好地控制内存使用,提高了整个流程的处理效率,同时避免了其他模块在不必要的NPC实体对象上浪费时间,且丝毫不影响玩家的游戏体验。
示例的,参见图6,图6是本申请实施例提供的虚拟场景的数据处理方法的应用场景示意图,如图6所示,游戏内玩家控制的角色(即玩家角色600)在空中飞翔,玩家角色600的视野范围601内能够看到3个NPC,分别为NPC602、NPC603和NPC604,随着玩家角色600继续飞翔降落后,玩家角色600的视野范围的内NPC不断发生变化,例如部分旧的NPC可以随着玩家角色的移动从玩家角色600当前的视野范围(例如视野范围605)内消失,例如图6中示出的NPC602和NPC603是仅在虚拟场景的某个特定区域存在的NPC,当玩家角色600离开这个区域时,NPC602和NPC603就会从玩家角色600当前的视野范围内消失。
部分旧的NPC可以一直处于玩家角色600的视野范围,例如视野范围601中的NPC604是用于承载玩家角色600的虚拟飞行载具,会随着玩家角色600一起移动,因此NPC604不会随着玩家角色600的移动而从视野范围中消失。当然,当NPC604将玩家角色600送到目的地之后,可以被回收到玩家角色的虚拟背包中,从而在玩家角色的视野范围内消失。
当然同时会有新的NPC在玩家角色600的视野范围内出现,例如当玩家角色600落地后,视野范围605内出现的NPC发生了极大改变,并且种类也有所变化,例如在视野范围605中出现了新的NPC606、NPC607和NPC608,而视野范围601中的至少部分NPC(例如NPC602和NPC603)不仅仅只是消失在视野范围605中,而且在客户端和服务器中都被优化删除了。此时,服务器会通知客户端有哪些旧NPC离开视野、以及有哪些新NPC出现,同时删除离开视野的旧NPC以及创建新出现的NPC实体对象,并通知客户端,客户端在接收到通知消息之后,将旧NPC实体对象删除,并显示新NPC实体对象。
下面首先对本申请实施例涉及的NPC数据预创建器、NPC数据管理器、NPC数据索引器、NPC实例化器、NPC过滤筛选器分别进行说明。
(1)NPC数据预创建器
在一些实施例中,开放世界游戏的玩法丰富多样,导致NPC生成规则和NPC基础数据都非常庞大,数以千计。如果在玩家注册账号时实时创建所有的NPC生成规则和NPC基础数据会消耗大量的CPU时间,增大服务器压力,从而降低注册并发数,影响游戏活跃度。而采用NPC数据预创建器可以在服务器启动或者空闲的时候预先创建游戏中所有NPC的基础数据,等到注册时再来取用即可,不仅优化了注册流程,而且充分利用了服务器的能力。
(2)NPC数据管理器
在一些实施例中,NPC基础数据的生成可以是由NPC数据管理器全权负责的,策划人员配置的所有NPC生成规则也都由它管理和实现,其中,NPC生成规则包括针对属性不会发生变化的NPC对应的生成规则、以及属性可能发生变化的NPC对应的生成规则,针对各种属性可能发生变化的NPC对应的生成规则,NPC数据管理器都会进行有效的检查,并且在满足生成规则的触发条件时,从NPC生成规则中提取NPC的基础数据,此时仅得到了NPC的基础数据,并不会进行NPC实体对象的实例化创建,因此流程简短快速,数据的内存占用也是极少的。
(3)NPC数据索引器
为了能够高效地从玩家角色所有的NPC基础数据中快速检索到指定范围内的NPC的基础数据,可以采用优化八叉树对数据进行索引管理,这样仅需指定检索范围,即可在对数时间得到指定范围内的NPC基础数据集合(即在指定范围内出现的多个NPC的基础数据)。
在一些实施例中,NPC可以是在二维或者三维空间中分布的,为了快速有效地根据指定空间范围获取NPC基础数据集合,本申请实施例可以采用优化的八叉树结构根据NPC的位置建立索引,从而管理NPC基础数据。从根节点到叶子节点之间的节点(即中间节点)提供了路径查询(索引)的功能,这也是一个将原始的大场景空间进行细化的过程,到了叶子节点这一层才真正保存属于该叶子节点(也就是子空间)的NPC基础数据,这些NPC的位置就处于该区域。
示例的,图7是本申请实施例提供的八叉树结构示意图,图7示出的八叉树结构具有3层,NPC数据索引器就是对图7示出的八叉树结构的封装。图7中示出的方框节点(例如节点1-2、节点1-6等)就是中间节点,主要作用是管理下属的子空间并且提供空间索引的功能,不存储NPC基础数据;图7中示出的圆形节点(例如节点A、节点B)则是叶子节点,其不仅管理了自己的子空间,而且存储了属于该子空间的NPC基础数据。此外,如果一个叶子节点(例如图7中示出的节点1-2)管理的数据量超过数据量阈值,那么节点1-2就会***,它所管理的子空间也会***成两个,形成两个新的叶子节点(例如节点A和节点B),节点1-2所管理的NPC基础数据也会交给新创建的两个叶子节点管理,节点1-2本身则会成为一个新的中间节点。如此,通过利用八叉树结构,指定具体范围,NPC数据索引器就能够在对数时间内找到处于该范围内的所有NPC基础数据,提高了NPC的管理效率。
(4)NPC实例化器
在一些实施例中,NPC实体对象的创建可以是由NPC实例化器全权负责的,例如NPC实例化器可以利用NPC数据索引器提供的范围检索功能快速获取AOI范围内的NPC基础数据集合。然而,AOI范围内可能存在很多的NPC,导致超出了客户端的显示上限,或者说在完全不影响玩家的游戏体验的前提下只需要服务器创建一部分必要的NPC,这样不仅可以减少服务器的内存,还能够降低客户端的内存和流量。因此,NPC实例化器还可以引入NPC过滤筛选器,根据设定的过滤规则筛选出一定数量的高权重的NPC进行实例化处理,并将创建出的NPC实体对象下发给客户端。
在另一些实施例中,在多场景下NPC基础数据的管理中,玩家在控制角色在场景A中进行游戏时,可能场景B中的生成规则也在生效,按照相关技术提供的方案,会同时生成两个场景中的NPC实体对象。然而,在本申请实施例提供的方案中,由于玩家角色当前处于场景A中,那么只对场景A中的NPC进行实例化处理,而对于场景B中的NPC则不进行实例化处理,当后续玩家角色移动至场景B时,再对场景B中的NPC进行实例化处理,如此,通过NPC实体对象创建的两段式过程,可以避免预先生成和发送不必要的NPC实体对象。
(5)NPC过滤筛选器
在一些实施例中,NPC过滤筛选器可以根据配置的过滤策略对指定范围内出现的多个NPC进行过滤,且能够方便灵活地加载和卸载策略。例如可以使用NPC与玩家角色之间的距离(距离玩家角色越近的NPC,对应的权重越大)、NPC业务重要性(业务重要性程度越高的NPC,对应的权重越大)、以及过去是否出现在玩家角色的视野中(相较于没有在玩家角色的视野中出现的NPC,曾经出现在玩家角色的视野中的NPC,对应的权重更大)等策略进行过滤。通过NPC过滤筛选器可以有效筛选出对玩家当前游戏进程来说最为重要的NPC集合。也就是说,在NPC实例化器和NPC过滤筛选器的共同作用下,可以有效地将每个玩家的NPC实体对象的数量控制在一个合理的范围,不仅不会影响玩家的游戏体验,而且降低了服务器和终端设备的内存、CPU消耗以及流量。
在另一些实施例中,由于游戏在运行过程中,具有非常明显的时段集中性,某些时间段玩家的数量非常多,服务器的压力很大,某些时间段的玩家数量很少,服务器非常空闲。为了使服务器的压力都维持在一个稳定的水平,本申请实施例还可以根据服务器负载检测器提供的接口及时了解服务器的负载情况,根据服务器的负载实时调整NPC实例化的最大数量,当服务器的负载高于设定的参考负载时,可以降低一点;当服务器的负载低于参考负载时,可以提高一点,大多数情况都维持在一个预先设定好的数值,如此,既充分平衡了服务器的负载,利用了服务器的能力,也不会影响玩家的游戏体验。
本申请实施例提供的虚拟场景的数据处理方法,以上述五个模块分工协作组成,每个模块之间仅提供必要的接口,屏蔽实现细节,能够像搭积木一样实现复杂的NPC实体对象生成、创建和管理***,***抽象性高,可复用性和可维护性也非常好。如果其他模块要引用相关功能,或者是需要引入其他模块的功能,也能够方便的接入,可伸缩性优异。
也就是说,本申请实施例提供的方案中,NPC数据管理器负责所有NPC基础数据的生成,并交由NPC数据索引器进行管理,NPC实例化器从NPC数据索引器中获取指定范围内的NPC基础数据集合,随后经过NPC过滤筛选器进行过滤处理后得到一定数量的对玩家最为重要的NPC基础数据集合,依此创建NPC实体对象,最后下发给客户端,并且能够通过检测服务器的负载情况实时调整实例化NPC的最大数量。
下面对本申请实施例提供的虚拟场景的数据处理方法进行具体说明。
在一些实施例中,参见图8,图8是本申请实施例提供的NPC生成和管理原理示意图,如图8所示,整个方案包括六层,从数据流动方向依次是NPC生成规则配置预处理器,负责分类策划人员配置的所有NPC生成规则;NPC数据预创建器,负责在服务器启动或者空闲的时候创建完整的NPC基础数据,用于玩家注册时使用,避免注册时实时创建消耗大量的时间;NPC数据索引器,按照NPC的位置建立二维或者三维索引,从而能够快速查找到指定范围内的NPC基础数据集合;NPC数据管理器,组合和管理上述三个模块,执行NPC生成执行;NPC过滤筛选器,对于指定范围内的NPC集合,负责筛选出一定数量的权重靠前的NPC;NPC实例化器,负责创建NPC过滤筛选器筛选出的高权重的NPC对应的实体对象,并且管理实体对象的AOI视野数据,下面对每个模块分别进行具体说明。
(1)NPC生成规则配置预处理器
在一些实施例中,开放世界游戏中NPC种类非常多,玩法类型也非常丰富,为满足生成这些NPC以及实现相关的玩法,NPC生成规则的数量也非常多,可能达到几千条。为了避免时刻去检测每条生成规则是否被触发,本申请实施例提供的方案对所有的NPC生成规则进行了分类。首先分为两大类,一类是基础数据一旦生成后就不会再发生任何变化的NPC(例如向导NPC)对应的生成规则,这类生成规则不需要花费时间再去检测,也不需要存储在玩家角色自身数据中;第二类是有触发条件约束的NPC生成规则,需要由NPC数据管理器存储在玩家角色自身数据中,或者存储生成规则对应的标识,避免重复存储。
示例的,针对第二类生成规则,NPC生成规则配置预处理器会根据具体的触发条件进行进一步的分类,例如等级条件,这类生成规则只需要在玩家角色的等级发生变更时才需要检测;时间条件,根据所有的NPC生成规则的时间段再次分类,只有当前时间处于特定的时间段时,才会检测包括该时间段的NPC生成规则。如此,通过按照生成规则的触发条件,再分类检测各类生成规则,可以有效降低需要检测的生成规则集合大小,精准地实施NPC生成规则,有效提高了检测的效率,同时也降低了服务器的资源消耗。
(2)NPC数据预创建器
玩家注册时会存在大量的数据初始化,其中就包括NPC生成规则和大量的NPC基础数据,这些数据需要创建并且存储在玩家自身数据里。由于NPC生成规则可能高达几千条,由其生成的NPC基础数据也非常多。在玩家注册的时候才实时创建这些数据,效率太低,极大影响玩家注册,导致游戏注册并发比较低。
针对上述问题,本申请实施例可以采用NPC数据预创建器预创建玩家注册时所需的NPC基础数据,在玩家注册时直接取回来给玩家使用,而不是到了注册时才实时创建。关于预创建的间点主要有两处,第一处是服务器启动时进行预创建,第二处是根据服务器的负载情况来决定,当服务器的当前负载低于负载阈值时,可以进行预创建以备不时之需;最后的保底方案是在注册时预创建的基础数据无法覆盖注册时需要的全部基础数据,那就实时创建,优先保证玩家能够得到注册。
(3)NPC数据管理器
NPC数据管理器是整个技术方案的纽带部分,主要负责两部分数据的组织管理。第一部分是NPC生成规则,定期检测相关的生成规则,如果玩家角色满足生成规则中的触发条件(例如等级条件),则将相应的生成规则加入玩家角色已拥有的NPC生成规则集合(对应于上述的规则数据库)中,例如以等级条件为例,当玩家角色的等级达到等级阈值时,则可以解锁相应等级下的生成规则,并把解锁的生成规则(或者规则的标识)加入玩家角色已拥有的NPC生成规则集合中。此外,针对玩家角色已经拥有的NPC生成规则,NPC数据管理器也会定期检查生成规则,并根据检查结果执行对应的逻辑,包括过期规则删除、以及执行命中的NPC生成规则以生成NPC基础数据。第二部分则是NPC基础数据,根据游戏业务需要,可以将NPC基础数据按照各种业务维度组织成不同的数据集合,配合NPC数据管理器提供的相关接口,可以非常方便地被其他组件和模块访问和使用。
(4)NPC过滤筛选器
NPC过滤筛选器的主要功能是从NPC基础数据集合中选择出权重靠前的N个NPC进行实例化处理,创建对应的NPC实体对象并下发给客户端。
在一些实施例中,通过NPC数据索引器根据玩家角色的AOI得到的NPC基础数据的数量很多,很有可能高于客户端的视野可显示数量,且数据太多对服务器和客户端的压力也比较大。因此,为了选取最需要呈现的NPC,就需要对指定范围内存在的多个NPC进行筛选。例如可以针对在指定范围内存在的各个NPC的多种状态进行量化处理,然后对得到的多个量化值进行加权求和处理,得到每个NPC最终的权重,最后基于权重对多个NPC进行降序排序,并选择降序排序结果中处于头部区间的N个NPC即可。NPC状态选取的维度有很多,策略也比较复杂,而且通常和业务需求高度耦合,例如距离、队伍、好友、仇恨以及历史视野等。此外,为了提高移植性,还可以进行抽象分装,各个维度只需要实现各自的权重计算策略即可,其他无需关心。
(5)NPC实例化器
在经过上述组件的数据生成和筛选,最终得到指定数量的NPC基础数据,这些数据经过NPC实例化器处理才能创建对应的NPC实体对象,实体对象才具有游戏进行所需要的各种功能,例如移动、交互、战斗、爆出奖励等。NPC实例化器会调用统一的底层接口创建实体对象,并根据NPC基础数据对这些实体对象进行初始化,该过程完成后,将会更新到玩家角色的AOI视野数据,并通知给客户端。
此外,随着玩家游戏的进行,玩家角色的位置和状态可能发生变更,NPC实例化器都会做出及时的响应,不断通过接口从NPC数据管理器中得到当前的AOI内的NPC基础数据集合,经过NPC过滤筛选器的筛选后,再创建当前的AOI内新出现的NPC实体对象,无缝更新和切换玩家视野,保证玩家的游戏体验,同时旧视野中的实体对象将会被删除,以释放内存和降低流量消耗;当然,删除前会将实体对象的状态数据保存到对应的NPC基础数据中,以便下次能够准确无误地创建出来。
本申请实施例提供的技术方案中数据流主要包括四个过程,各个过程之间以NPC生成规则和NPC基础数据进行串联起来,该串联过程完全通过公共接口实现,不会涉及到每个数据流的实现细节。对于每个数据流而言,它们的数据加工和处理都是上述的各个组件的主要功能,具有很好的内聚性和封装性。不同组件之间利用接口串联可以犹如流水线一样组装所有组件,实现所需要的功能,具有很好的扩展性。
下面继续结合图9A对本申请实施例提供的虚拟场景的数据处理方法进行说明,如图9A所示,本申请实施例提供的虚拟场景的数据处理方法可以分为三个阶段,分别为初始化阶段、注册阶段和游戏阶段,其中,初始化阶段包括步骤901至步骤905、注册阶段包括步骤906至步骤909、游戏阶段包括步骤910至步骤915,下面首先对初始化阶段进行具体说明。
在步骤901中,判断服务器是否处于启动阶段或者负载低于阈值,如果不是,则执行步骤902;如果是,则执行步骤903。
在步骤902中,服务器确定不进行预创建。
在步骤903中,服务器获取策划人员配置的所有NPC生成规则。
在步骤904中,服务器从所有NPC生成规则提取NPC基础数据。
在步骤905中,服务器将NPC生成规则和基础数据存入全量数据库。
至此,服务器已经完成了NPC生成规则和基础数据的初始化,初始化阶段结束,将进入注册阶段,下面对注册阶段进行具体说明。
在步骤906中,服务器从全量数据库中获取NPC生成规则和基础数据。
在一些实施例中,当服务器检测到有新玩家进行注册时,可以从全量数据库中获取所有的NPC生成规则和从NPC生成规则中提取的NPC基础数据。
在步骤907中,服务器对NPC基础数据进行修正。
在一些实施例中,服务器可以根据玩家注册时的等级,对NPC基础数据的某些字段进行修正,例如假设玩家角色在注册时的等级为1级,则可以将NPC基础数据中包括的等级也修正为1级,从而使游戏中NPC的等级与玩家角色的等级适配,从而提高玩家的游戏体验。
在步骤908中,服务器对其他组件进行初始化。
这里,其他组件是游戏中除了上文提到的5个组件之外的组件,例如包括用于负责游戏中的交易的组件,用于负责不同游戏角色之间的战斗的组件等。
在步骤909中,服务器生成玩家角色的规则数据库。
在一些实施例中,服务器可以根据玩家角色当前的等级,将所有NPC生成规则中满足等级条件的生成规则加入玩家已拥有的NPC生成规则集合中,得到玩家角色的规则数据库。例如假设玩家角色的当前等级为1级,则可以将所有NPC生成规则中对应1级的NPC的生成规则作为玩家当前已经解锁的生成规则,并加入玩家已拥有的NPC生成规则集合中。
至此,玩家注册完毕,注册阶段结束,将进入游戏阶段,下面对游戏阶段进行具体说明。
在步骤910中,服务器迭代检测规则数据库中的每条NPC生成规则。
在步骤911中,服务器判断是否触发相关条件,如果是,则执行步骤912;如果否,则执行步骤910。
在步骤912中,服务器分别处理各类条件,当确定触发规则删除条件时,执行步骤913;当确定触发规则执行条件时,执行步骤914。
在步骤913中,服务器先删除从生成规则提取的基础数据,再删除生成规则。
在一些实施例中,当服务器检测到规则数据库中的某条NPC生成规则过期时(即触发了规则删除条件),则可以从基础数据库中删除从该生成规则提取的基础数据,并从规则数据库中删除该生成规则。
在步骤914中,服务器从生成规则提取NPC基础数据。
在步骤915中,服务器对基础数据库进行更新。
在一些实施例中,服务器在检测到规则数据库中的某条NPC生成规则包括的规则执行条件被满足时,可以从该NPC生成规则中提取新的NPC基础数据,并将基础数据库中存储的从该条NPC生成规则提取的原始NPC基础数据替换为新的NPC基础数据,从而实现对基础数据库的更新。
下面继续结合图9B对NPC实体对象的创建过程进行说明。
示例的,参见图9B,图9B是本申请实施例提供的虚拟场景的数据处理方法的流程示意图,将结合图9B示出的步骤进行说明。
在步骤916中,客户端向服务器发送玩家角色当前的AOI。
在步骤917中,服务器根据AOI得到指定范围内的NPC基础数据集合。
在一些实施例中,客户端可以向服务器实时上报玩家角色在开放世界中的当前AOI,以使服务器根据玩家角色当前的AOI调用NPC数据索引器获取指定范围(即当前AOI)内的NPC基础数据集合。
在步骤918中,服务器通过NPC过滤筛选器筛选出权重排名前N的NPC。
在步骤919中,服务器通过NPC实例化器创建出筛选得到的N个NPC对应的实体对象。
在步骤920中,服务器将N个NPC实体对象发送至客户端。
在步骤921中,客户端在当前AOI中显示N个实体对象。
在一些实施例中,客户端在接收到服务器发送的N个实体对象之后,可以在玩家角色当前的AOI中显示新出现的N个实体对象。
在步骤922中,服务器向客户端发送删除通知消息。
在步骤923中,客户端删除旧视野中的NPC实体对象。
需要说明的是,在玩家角色在开放世界移动的过程中,会重复执行上述的步骤916至步骤923,即当检测到玩家角色在开放世界中移动的距离大于距离阈值时,服务器可以实时高效地通知客户端玩家角色的视野变化,无缝更新和切换玩家角色的视野范围,保证玩家的游戏体验,同时旧视野中的NPC实体对象被删除之后,可以释放内存,降低流量消耗。
在一些实施例中,玩家下载完游戏,打开游戏客户端注册时开始初始化新账号数据,当初始化进程来到NPC基础数据时,相关组件会从预创建出的NPC全量数据列表中取出一份事先处理好的NPC基础数据直接赋予玩家,没有了整个庞大数据的初始化工作,注册流程会有很大的改善。
玩家注册进入游戏后,服务器根据玩家控制的角色的AOI会选取权重最高的一批NPC,接着对筛选得到的NPC进行实例化处理,得到对应的NPC实体对象,并且下发给客户端展示。随着玩家角色的移动,客户端会不断上报玩家角色在开放世界中的当前位置,当服务器检测到玩家角色的位置移动达到某一阈值时,便会触发玩家角色的AOI的更新。例如服务器可以选择当前AOI内权重最高的一批NPC进行实例化处理,得到对象集合B,并且和旧的AOI内的对象集合A进行差集计算,集合A和集合B的交集中的实体对象是视野变化前后均有的NPC实体对象,保留不做任何处理,集合B有但集合A没有的对象属于新进入视野的NPC实体对象,服务器会下发相关数据给客户端进行展示;集合B没有但集合A有的对象是旧AOI里的NPC实体对象,服务器会通知客户端进行删除,通过这样的流程处理,服务器可以实时高效地通知客户端玩家角色的视野变化。
示例的,参见图10,图10是本申请实施例提供的虚拟场景的数据处理方法的应用场景示意图,如图10所示,玩家注册进入游戏后,在玩家控制的角色(即玩家角色1000)的视野范围1001中显示有权重最高的一批NPC实体对象,例如包括种子怪1002和石头怪1003,随后当玩家角色1000在注册地附近移动后视野发生变化,在新的视野范围1004出现了两个新的NPC实体对象,例如黑衣人1005和他守护的黑箱1006。
综上所述,本申请实施例提供的虚拟场景的数据处理方法具有以下有益效果:
(1)针对所有的NPC生成规则,本申请实施例提供的方案做出了非常有益的分类,针对不同类型的生成规则采取相对应的处理策略,例如玩家注册伊始就应该存在且生效的生成规则其实就没有存储的必要,直接从该生成规则中提取NPC基础数据即可,而且也不必要后续再去迭代检测;而针对需要检测的生成规则,也会根据不同的触发条件再次进行分类,从而做到精准高效的检测处理,降低了服务器的内存使用,提高了检测处理效率;
(2)NPC生成规则和NPC基础数据属于玩家及其重要的数据,为了提高注册效率,降低注册时延,针对这部分的数据,本申请实施例采用在服务器空闲的时候创建一定数量的NPC基础数据进行暂存,供注册时直接取用,而不是实时创建,有效利用了服务器的算力,避免服务器有时候非常空闲,有时候非常繁忙,使其CPU消耗处于稳定;
(3)玩家角色的AOI内NPC实体对象的数量采取有限但是不影响玩家游戏体验的策略,目的在于减少服务器的内存使用和CPU处理压力,同时也是为了降低流量消耗和客户端的处理负担。为了达到这一目的,NPC实例化器从NPC数据管理器中获取AOI内的NPC基础数据集合,然后经过NPC过滤筛选器筛选得到权重靠前的N个NPC的基础数据,再进行实例化处理,创建对应的实体对象;
(4)每个数据流处理过程封装成组件,具有高度内聚性,对外提供必需的数据访问接口,犹如搭积木一般实现所需的功能,扩展性和可维护性都非常好。
下面继续说明本申请实施例提供的虚拟场景的数据处理装置243的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器240的虚拟场景的数据处理装置243中的软件模块可以包括:NPC数据管理器2431、NPC数据索引器2432、NPC过滤筛选器2433和NPC实例化器2434。
NPC数据管理器2431,用于获取玩家角色在虚拟场景中的当前位置,并确定包括当前位置的当前查询范围;NPC数据索引器2432,用于根据当前查询范围查询基础数据库,得到与当前查询范围内待生成的多个非玩家角色分别对应的基础数据,其中,每个非玩家角色的基础数据包括用于对非玩家角色进行实例化处理的多个属性;NPC过滤筛选器2433,用于确定多个非玩家角色的权重,并根据多个非玩家角色的权重进行降序排序,得到降序排序结果;NPC实例化器2434,用于将降序排序结果中从首位开始的第一数量的非玩家角色进行实例化处理,得到与第一数量的非玩家角色分别对应的第一数量的实体对象,其中,第一数量小于多个非玩家角色的总数;以及用于向控制玩家角色的客户端发送第一数量的实体对象,以使客户端在当前查询范围内显示第一数量的非玩家角色对应的虚拟形象。
在一些实施例中,NPC过滤筛选器2433,还用于针对每个非玩家角色执行以下处理:对非玩家角色的至少一个维度的状态进行量化处理,对应得到至少一个量化值;当至少一个量化值的数量为一个时,将量化值确定为非玩家角色的权重;当至少一个量化值的数量为多个时,对多个量化值进行加权求和处理,将得到的加权求和结果确定为非玩家角色的权重。
在一些实施例中,NPC过滤筛选器2433,还用于根据当前查询范围所在区域的类型,采用与类型对应的调整方式对多个非玩家角色的权重进行调整;将经过调整后的多个非玩家角色中权重超过权重阈值的至少一个非玩家角色,确定为第一数量的非玩家角色。
在一些实施例中,第一数量是根据服务器的负载动态确定的;NPC实例化器2434,还用于通过执行以下处理之一确定第一数量:将服务器当前的负载与设定的参考负载进行比较,其中,参考负载是通过预设值进行标定的;当负载低于参考负载时,对预设值增大预定数量或比例,并将增大后的预设值确定为第一数量;当负载高于参考负载时,对预设值减小预定数量或比例,并将减小后的预设值确定为第一数量;在预先设置的多个参考负载区间中,确定服务器当前的负载所处的区间,并将区间对应的实例化数量确定为第一数量,其中,不同的参考负载区间对应不同的实例化数量。
在一些实施例中,基础数据库通过多叉树结构存储虚拟场景中的所有非玩家角色的基础数据,多叉树结构包括:一个顶层节点,代表虚拟场景;多个中间节点,每个中间节点代表虚拟场景中的一个空间,空间包括下属的多个子空间的索引;多个叶子节点,每个叶子节点代表所归属的中间节点中的一个子空间,子空间包括位于子空间中的非玩家角色的基础数据;NPC过滤筛选器2433,还用于根据当前查询范围查询多叉数结构,得到多叉数结构中被当前查询范围覆盖的至少一个中间节点;查询被覆盖的每个中间节点包括的每个叶子节点,将查询到的多个非玩家角色分别对应的基础数据,作为与当前查询范围内待生成的多个非玩家角色分别对应的基础数据。
在一些实施例中,非玩家角色的基础数据是从非玩家角色的生成规则提取的,生成规则的类型包括静态生成规则和动态生成规则,且动态生成规则存储于规则数据库中;NPC数据管理器2431,还用于响应于规则数据库中的任一动态生成规则过期,从基础数据库中删除从任一动态生成规则提取的基础数据;响应于任一中间节点代表的多个子空间中的至少部分基础数据被删除,且多个子空间中剩余的基础数据的数据量小于数据量阈值,将多个子空间合并为1个叶子节点。
在一些实施例中,非玩家角色的基础数据是从非玩家角色的生成规则提取得到的,生成规则的类型包括静态生成规则和动态生成规则,且动态生成规则存储于规则数据库中;NPC数据管理器2431,还用于响应于规则数据库中的任一动态生成规则包括的任意一个规则执行条件被满足,从任一动态生成规则提取非玩家角色对应的基础数据;将提取的非玩家角色的基础数据存入多叉数结构中的目标叶子节点,其中,提取的非玩家角色的基础数据包括非玩家角色的位置,且非玩家角色的位置属于目标叶子节点的子空间;响应于目标叶子节点的数据量达到数据量阈值,将目标叶子节点转换为新的中间节点,并将目标叶子节点中存储的基础数据转移到新的中间节点下属的两个新的叶子节点。
在一些实施例中,NPC实例化器2434,还用于比较当前查询范围和历史查询范围,其中,历史查询范围是包括历史位置的查询范围,历史位置是玩家角色在当前位置之前在虚拟场景中所处的位置;以及用于响应于当前查询范围与历史查询范围完全不同,转入执行向控制玩家角色的客户端发送第一数量的实体对象的处理;NPC实例化器2434,还用于响应于当前查询范围与历史查询范围存在交叉区域,向控制玩家角色的客户端发送其他非玩家角色对应的实体对象,其他非玩家角色为第一数量的非玩家角色中位于交叉区域以外的非玩家角色,以使客户端继续显示交叉区域中的非玩家角色对应的虚拟形象、以及其他区域中的非玩家角色对应的虚拟形象,其他区域为当前查询范围中除交叉区域外的区域;以及用于响应于历史查询范围相对于当前查询范围存在差异区域,向控制玩家角色的客户端发送通知消息,其中,通知消息用于通知客户端删除差异区域中的非玩家角色对应的实体对象。
在一些实施例中,NPC数据管理器2431,还用于针对位于差异区域中的每个非玩家角色执行以下处理:在基础数据库中增加一个新的字段,将非玩家角色对应的实体对象的状态数据存储至新的字段中。
在一些实施例中,NPC实例化器2434,还用于响应于玩家角色离开当前查询范围后再次返回当前查询范围,向客户端发送其他非玩家角色的实体对象,其中,其他非玩家角色为当前查询范围中除第一数量的非玩家角色之外的非玩家角色。
在一些实施例中,NPC数据管理器2431,还用于将基于当前位置的第一人称视角或第三人称视角的视野,确定为包括当前位置的当前查询范围;或者,用于将以当前位置为中心的设定尺寸的几何区域,确定为包括当前位置的当前查询范围。
在一些实施例中,在基础数据库中存储有每个非玩家角色的基础数据;在规则数据库中存储有与每个非玩家角色对应的生成规则,且生成规则的类型均为动态生成规则,动态生成规则是具有动态变化属性的非玩家角色的生成规则,每个动态生成规则包括多个规则执行条件,且当不同的规则执行条件被满足时,从动态生成规则提取得到的基础数据不同;NPC数据管理器2431,还用于通过以下方式更新基础数据库:对规则数据库中存储的每个动态生成规则进行过期检查;响应于规则数据库中出现过期的动态生成规则,删除基础数据库中从过期的动态生成规则提取的基础数据、以及从规则数据库中删除过期的动态生成规则;响应于规则数据库中的任一动态生成规则包括的规则执行条件被满足,从任一动态生成规则提取新的基础数据,并将基础数据库中与任一动态生成规则对应的原有的基础数据替换为新的基础数据。
在一些实施例中,每个动态生成规则还包括解锁条件;NPC数据管理器2431,还用于通过以下方式更新规则数据库:响应于规则数据库中的任一动态生成规则满足规则删除条件,将任一动态生成规则作为过期的动态生成规则,并从规则数据库中删除过期的动态生成规则;响应于全量数据库中的任一动态生成规则包括的解锁条件被满足,将任一动态生成规则存入规则数据库中。
在一些实施例中,虚拟场景的数据处理装置243还包括NPC数据预创建器2435,用于在玩家角色的注册阶段,通过以下方式初始化规则数据库和基础数据库:从全量数据库中获取全部生成规则;将全部生成规则分类为静态生成规则和动态生成规则,其中,静态生成规则是具有固定属性的非玩家角色的生成规则,动态生成规则是具有动态变化属性的非玩家角色的生成规则;从静态生成规则提取具有固定属性的非玩家角色对应的基础数据,从动态生成规则提取具有动态变化属性的非玩家角色对应的基础数据,并将所提取的基础数据存入基础数据库中;将动态生成规则存入规则数据库中。
在一些实施例中,虚拟场景的数据处理装置243还包括NPC生成规则配置预处理器2436,用于通过以下方式初始化全量数据库:在初始化阶段中,获取针对虚拟场景配置的全部生成规则,其中,初始化阶段包括以下至少之一:服务器的启动阶段,服务器的负载低于负载阈值的阶段;基于全部生成规则,确定在虚拟场景中需要生成的非玩家角色的类型;从全部生成规则提取每个类型的非玩家角色的基础数据,并将所提取的基础数据、以及全部生成规则存入全量数据库中。
在一些实施例中,NPC实例化器2434,还用于在内存空间中分配存储区域;在存储区域中生成第一数量的非玩家角色分别对应的实体对象,其中,实体对象包括代表非玩家角色的属性的变量。
需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本申请实施例提供的虚拟场景的数据处理装置中未尽的技术细节,可以根据图3、或图5任一附图的说明而理解。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机可执行指令,处理器执行该计算机可执行指令,使得该计算机设备执行本申请实施例上述的虚拟场景的数据处理方法。
本申请实施例提供一种存储有计算机可执行指令的计算机可读存储介质,其中存储有计算机可执行指令,当计算机可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的虚拟场景的数据处理方法,例如,如图3、或图5示出的虚拟场景的数据处理方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (20)
1.一种虚拟场景的数据处理方法,其特征在于,所述方法包括:
获取玩家角色在虚拟场景中的当前位置,确定包括所述当前位置的当前查询范围;
根据所述当前查询范围查询基础数据库,得到与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据,其中,每个所述非玩家角色的基础数据包括用于对所述非玩家角色进行实例化处理的多个属性;
确定所述多个非玩家角色的权重,并根据所述多个非玩家角色的权重进行降序排序,得到降序排序结果;
将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理,得到与所述第一数量的非玩家角色分别对应的第一数量的实体对象,其中,所述第一数量小于所述多个非玩家角色的总数;
向控制所述玩家角色的客户端发送所述第一数量的实体对象,以使所述客户端在所述当前查询范围内显示所述第一数量的非玩家角色对应的虚拟形象。
2.根据权利要求1所述的方法,其特征在于,所述确定所述多个非玩家角色的权重,包括:
针对每个所述非玩家角色执行以下处理:
对所述非玩家角色的至少一个维度的状态进行量化处理,对应得到至少一个量化值;
当所述至少一个量化值的数量为一个时,将所述量化值确定为所述非玩家角色的权重;
当所述至少一个量化值的数量为多个时,对所述多个量化值进行加权求和处理,将得到的加权求和结果确定为所述非玩家角色的权重。
3.根据权利要求1所述的方法,其特征在于,在将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理之前,所述方法还包括:
根据所述当前查询范围所在区域的类型,采用与所述类型对应的调整方式对所述多个非玩家角色的权重进行调整;
将经过调整后的所述多个非玩家角色中权重超过权重阈值的至少一个非玩家角色,确定为所述第一数量的非玩家角色。
4.根据权利要求1所述的方法,其特征在于,
所述第一数量是根据服务器的负载动态确定的;
在将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理之前,所述方法还包括:
通过执行以下处理之一确定所述第一数量:
将所述服务器当前的负载与设定的参考负载进行比较,其中,所述参考负载是通过预设值进行标定的;当所述负载低于所述参考负载时,对所述预设值增大预定数量或比例,并将增大后的所述预设值确定为所述第一数量;当所述负载高于所述参考负载时,对所述预设值减小预定数量或比例,并将减小后的所述预设值确定为所述第一数量;
在预先设置的多个参考负载区间中,确定所述服务器当前的负载所处的区间,并将所述区间对应的实例化数量确定为所述第一数量,其中,不同的所述参考负载区间对应不同的所述实例化数量。
5.根据权利要求1所述的方法,其特征在于,
所述基础数据库通过多叉树结构存储所述虚拟场景中的所有非玩家角色的基础数据,所述多叉树结构包括:一个顶层节点,代表所述虚拟场景;多个中间节点,每个所述中间节点代表所述虚拟场景中的一个空间,所述空间包括下属的多个子空间的索引;多个叶子节点,每个所述叶子节点代表所归属的所述中间节点中的一个子空间,所述子空间包括位于所述子空间中的所述非玩家角色的基础数据;
所述根据所述当前查询范围查询基础数据库,得到与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据,包括:
根据所述当前查询范围查询所述多叉数结构,得到所述多叉数结构中被所述当前查询范围覆盖的至少一个中间节点;
查询被覆盖的每个所述中间节点包括的每个叶子节点,将查询到的多个非玩家角色分别对应的基础数据,作为与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据。
6.根据权利要求5所述的方法,其特征在于,
所述非玩家角色的基础数据是从所述非玩家角色的生成规则提取的,所述生成规则的类型包括静态生成规则和动态生成规则,且所述动态生成规则存储于规则数据库中;
在所述玩家角色处于所述虚拟场景的过程中,所述方法还包括:
响应于所述规则数据库中的任一动态生成规则过期,从所述基础数据库中删除从所述任一动态生成规则提取的基础数据;
响应于任一中间节点代表的多个子空间中的至少部分基础数据被删除,且所述多个子空间中剩余的基础数据的数据量小于数据量阈值,将所述多个子空间合并为1个叶子节点。
7.根据权利要求5所述的方法,其特征在于,
所述非玩家角色的基础数据是从所述非玩家角色的生成规则提取得到的,所述生成规则的类型包括静态生成规则和动态生成规则,且所述动态生成规则存储于规则数据库中;
在所述玩家角色处于所述虚拟场景的过程中,所述方法还包括:
响应于所述规则数据库中的任一动态生成规则包括的任意一个规则执行条件被满足,从所述任一动态生成规则提取所述非玩家角色对应的基础数据;
将提取的所述非玩家角色的基础数据存入所述多叉数结构中的目标叶子节点,其中,所述提取的所述非玩家角色的基础数据包括所述非玩家角色的位置,且所述非玩家角色的位置属于所述目标叶子节点的子空间;
响应于所述目标叶子节点的数据量达到数据量阈值,将所述目标叶子节点转换为新的中间节点,并将所述目标叶子节点中存储的基础数据转移到所述新的中间节点下属的两个新的叶子节点。
8.根据权利要求1至7任一项所述的方法,其特征在于,在向控制所述玩家角色的客户端发送所述第一数量的实体对象之前,所述方法还包括:
比较所述当前查询范围和历史查询范围,其中,所述历史查询范围是包括历史位置的查询范围,所述历史位置是所述玩家角色在所述当前位置之前在所述虚拟场景中所处的位置;
响应于所述当前查询范围与所述历史查询范围完全不同,转入执行向控制所述玩家角色的客户端发送所述第一数量的实体对象的处理;
响应于所述当前查询范围与所述历史查询范围存在交叉区域,向控制所述玩家角色的客户端发送其他非玩家角色对应的实体对象,所述其他非玩家角色为所述第一数量的非玩家角色中位于所述交叉区域以外的非玩家角色,以使所述客户端继续显示所述交叉区域中的非玩家角色对应的虚拟形象、以及其他区域中的非玩家角色对应的虚拟形象,所述其他区域为所述当前查询范围中除所述交叉区域外的区域;
响应于所述历史查询范围相对于所述当前查询范围存在差异区域,向控制所述玩家角色的客户端发送通知消息,其中,所述通知消息用于通知所述客户端删除所述差异区域中的非玩家角色对应的实体对象。
9.根据权利要求8所述的方法,其特征在于,在向控制所述玩家角色的客户端发送通知消息之前,所述方法还包括:
针对位于所述差异区域中的每个非玩家角色执行以下处理:
在所述基础数据库中增加一个新的字段,将所述非玩家角色对应的实体对象的状态数据存储至所述新的字段中。
10.根据权利要求1至7任一项所述的方法,其特征在于,在向控制所述玩家角色的客户端发送所述第一数量的实体对象之后,所述方法还包括:
响应于所述玩家角色离开所述当前查询范围后再次返回所述当前查询范围,向所述客户端发送其他非玩家角色的实体对象,其中,所述其他非玩家角色为所述当前查询范围中除所述第一数量的非玩家角色之外的非玩家角色。
11.根据权利要求1至7任一项所述的方法,其特征在于,所述确定包括所述当前位置的当前查询范围,包括:
将基于所述当前位置的第一人称视角或第三人称视角的视野,确定为包括所述当前位置的当前查询范围;或者,
将以所述当前位置为中心的设定尺寸的几何区域,确定为包括所述当前位置的当前查询范围。
12.根据权利要求1至7任一项所述的方法,其特征在于,
在所述基础数据库中存储有每个所述非玩家角色的基础数据;
在规则数据库中存储有与每个所述非玩家角色对应的生成规则,且所述生成规则的类型均为动态生成规则,所述动态生成规则是具有动态变化属性的非玩家角色的生成规则,每个所述动态生成规则包括多个规则执行条件,且当不同的所述规则执行条件被满足时,从所述动态生成规则提取得到的基础数据不同;
在所述玩家角色处于所述虚拟场景的过程中,所述方法还包括:
通过以下方式更新所述基础数据库:
对所述规则数据库中存储的每个所述动态生成规则进行过期检查;
响应于所述规则数据库中出现过期的动态生成规则,删除所述基础数据库中从所述过期的动态生成规则提取的基础数据、以及从所述规则数据库中删除所述过期的动态生成规则;
响应于所述规则数据库中的任一动态生成规则包括的规则执行条件被满足,从所述任一动态生成规则提取新的基础数据,并将所述基础数据库中与所述任一动态生成规则对应的原有的基础数据替换为所述新的基础数据。
13.根据权利要求12所述的方法,其特征在于,
每个所述动态生成规则还包括解锁条件;
在所述玩家角色处于所述虚拟场景的过程中,所述方法还包括:
通过以下方式更新所述规则数据库:
响应于所述规则数据库中的任一动态生成规则满足规则删除条件,将所述任一动态生成规则作为过期的动态生成规则,并从所述规则数据库中删除所述过期的动态生成规则;
响应于全量数据库中的任一动态生成规则包括的解锁条件被满足,将所述任一动态生成规则存入所述规则数据库中。
14.根据权利要求12所述的方法,其特征在于,在获取所述玩家角色在虚拟场景中的当前位置之前,所述方法还包括:
在所述玩家角色的注册阶段,通过以下方式初始化所述规则数据库和所述基础数据库:
从全量数据库中获取全部生成规则;
将所述全部生成规则分类为静态生成规则和动态生成规则,其中,所述静态生成规则是具有固定属性的非玩家角色的生成规则,所述动态生成规则是具有动态变化属性的非玩家角色的生成规则;
从所述静态生成规则提取所述具有固定属性的非玩家角色对应的基础数据,从所述动态生成规则提取所述具有动态变化属性的非玩家角色对应的基础数据,并将所提取的所述基础数据存入所述基础数据库中;
将所述动态生成规则存入所述规则数据库中。
15.根据权利要求13所述的方法,其特征在于,所述方法还包括:
通过以下方式初始化所述全量数据库:
在初始化阶段中,获取针对所述虚拟场景配置的全部生成规则,其中,所述初始化阶段包括以下至少之一:服务器的启动阶段,服务器的负载低于负载阈值的阶段;
基于所述全部生成规则,确定在所述虚拟场景中需要生成的非玩家角色的类型;
从所述全部生成规则提取每个所述类型的所述非玩家角色的基础数据,并将所提取的所述基础数据、以及所述全部生成规则存入所述全量数据库中。
16.根据权利要求1至7任一项所述的方法,其特征在于,所述将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理,得到与所述第一数量的非玩家角色分别对应的第一数量的实体对象,包括:
在内存空间中分配存储区域;
在所述存储区域中生成所述第一数量的非玩家角色分别对应的实体对象,其中,所述实体对象包括代表所述非玩家角色的属性的变量。
17.一种虚拟场景的数据处理装置,其特征在于,所述装置包括:
非玩家角色NPC数据管理器,用于获取玩家角色在虚拟场景中的当前位置,并确定包括所述当前位置的当前查询范围;
NPC数据索引器,用于根据所述当前查询范围查询基础数据库,得到与所述当前查询范围内待生成的多个非玩家角色分别对应的基础数据,其中,每个所述非玩家角色的基础数据包括用于对所述非玩家角色进行实例化处理的多个属性;
NPC过滤筛选器,用于确定所述多个非玩家角色的权重,并根据所述多个非玩家角色的权重进行降序排序,得到降序排序结果;
NPC实例化器,用于将所述降序排序结果中从首位开始的第一数量的非玩家角色进行所述实例化处理,得到与所述第一数量的非玩家角色分别对应的第一数量的实体对象,其中,所述第一数量小于所述多个非玩家角色的总数;
所述NPC实例化器,还用于向控制所述玩家角色的客户端发送所述第一数量的实体对象,以使所述客户端在所述当前查询范围内显示所述第一数量的非玩家角色对应的虚拟形象。
18.一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至16任一项所述的虚拟场景的数据处理方法。
19.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时,实现权利要求1至16任一项所述的虚拟场景的数据处理方法。
20.一种计算机程序产品,包括计算机程序或计算机可执行指令,其特征在于,所述计算机程序或计算机可执行指令被处理器执行时,实现权利要求1至16任一项所述的虚拟场景的数据处理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211093802.2A CN116999794A (zh) | 2022-09-08 | 2022-09-08 | 虚拟场景的数据处理方法、装置、电子设备及存储介质 |
PCT/CN2023/111425 WO2024051420A1 (zh) | 2022-09-08 | 2023-08-07 | 虚拟场景的数据处理方法、装置、电子设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211093802.2A CN116999794A (zh) | 2022-09-08 | 2022-09-08 | 虚拟场景的数据处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116999794A true CN116999794A (zh) | 2023-11-07 |
Family
ID=88560663
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211093802.2A Pending CN116999794A (zh) | 2022-09-08 | 2022-09-08 | 虚拟场景的数据处理方法、装置、电子设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116999794A (zh) |
WO (1) | WO2024051420A1 (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6047842B2 (ja) * | 2008-07-22 | 2016-12-21 | デイブレイク ゲーム カンパニー リミテッド ライアビリティ カンパニー | シミュレーションにおける物理的相互作用のためのシステム及び方法 |
JP6246817B2 (ja) * | 2013-09-09 | 2017-12-13 | フィールズ株式会社 | ゲーム処理装置、ゲーム処理方法及びコンピュータプログラム |
CN109499059B (zh) * | 2018-11-15 | 2020-08-11 | 腾讯科技(深圳)有限公司 | 对象的渲染方法和装置、存储介质、电子装置 |
CN113457147A (zh) * | 2021-06-25 | 2021-10-01 | 网易(杭州)网络有限公司 | 一种游戏中的信息提示方法、装置、电子设备及存储介质 |
CN113713388B (zh) * | 2021-09-01 | 2024-06-04 | 网易(杭州)网络有限公司 | 一种游戏数据处理方法、装置、设备及存储介质 |
-
2022
- 2022-09-08 CN CN202211093802.2A patent/CN116999794A/zh active Pending
-
2023
- 2023-08-07 WO PCT/CN2023/111425 patent/WO2024051420A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024051420A1 (zh) | 2024-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112044074B (zh) | 对非玩家角色寻路的方法、装置、存储介质及计算机设备 | |
WO2021244322A1 (zh) | 瞄准虚拟对象的方法、装置、设备及存储介质 | |
CN105935493B (zh) | 计算机***、游戏装置及用于控制角色的方法 | |
CN108463273A (zh) | 基于游戏者的移动历史来进行非游戏者角色的路径寻找的游戏***等 | |
KR102258278B1 (ko) | 시즌별 보상 분배 시스템 | |
WO2022048333A1 (zh) | 虚拟对象动态变化方法、装置、设备及存储介质 | |
KR20080069513A (ko) | 랭킹 설정 시스템, 랭킹 설정 프로그램 및 그 프로그램을저장한 기록 매체 | |
CN111558221B (zh) | 虚拟场景的显示方法和装置、存储介质及电子设备 | |
CN111544889B (zh) | 虚拟对象的行为控制方法和装置及存储介质 | |
WO2022156616A1 (zh) | 虚拟对象的控制方法、装置、终端、存储介质及程序产品 | |
TWI821779B (zh) | 虛擬對象的控制方法、裝置、計算機設備及儲存媒體 | |
WO2023142587A1 (zh) | 虚拟对象的控制方法、装置、设备、介质及程序产品 | |
CN110070609A (zh) | 地形数据的处理方法、装置、存储介质、处理器及终端 | |
CN108939535B (zh) | 虚拟场景的音效控制方法及装置、存储介质、电子设备 | |
Kiefer et al. | Systematically exploring the design space of location-based games | |
Asperti et al. | Crawling in rogue’s dungeons with (partitioned) a3c | |
CN114344905A (zh) | 虚拟对象的团队交互处理方法、装置、设备、介质及程序 | |
KR20040010038A (ko) | 온라인 롤플레잉게임용 서버 | |
CN116999794A (zh) | 虚拟场景的数据处理方法、装置、电子设备及存储介质 | |
CN117695623A (zh) | 虚拟世界中物理场景资源的管理方法、装置及计算机设备 | |
WO2024078270A1 (zh) | 虚拟场景的处理方法、设备、***、计算机可读存储介质及计算机程序产品 | |
CN108553897B (zh) | 游戏中数据的处理方法、装置、存储介质和电子装置 | |
CN112439199A (zh) | 非暂态计算机可读介质和视频游戏处理*** | |
CN111589115A (zh) | 虚拟对象的视野控制方法、装置、存储介质及计算机设备 | |
US11648462B2 (en) | Non-transitory computer-readable medium and video game processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40100487 Country of ref document: HK |