本发明涉及计算机技术领域,尤其涉及一种游戏中游戏热更新方法、装置和存储介质。
背景技术:
unity3d作为一种常用的游戏引擎,越来越多的游戏厂商和开发者选择使用unity3d引擎开发手机游戏,为了缩短用户获取客户端新版内容的流程和缩短手机游戏通过appstore审核的时间,增加unity3d手机游戏的热更新功能是unity3d手机游戏开发的关键。
一种游戏热更新方案中,使用lua插件实现游戏热更新,将需要热更新的游戏功能使用lua脚本编写,再将lua脚本文件打包成assetbundle资源,客户端更新时下载lua脚本资源,加载lua脚本并执行lua代码,实现热更新;或者使用动态链接库文件(dynamiclinklibrary,dll)实现游戏热更新,将需要热更新的游戏功能编译成dll,再将dll文件打包成assetbundle资源,客户端更新时下载dll文件资源,游戏运行时加载dll文件并使用反射机制来执行dll,达到热更新目的。
然而,由于ios平台禁止在应用中使用lua脚本的功能,使用lua插件来实现unity3d的热更新违背了ios的规定,具有一定的被禁用的风险,并且由于ios平台禁止了c#的部分反射操作,因此无法在ios平台上使用dll实现游戏热更新。
技术实现要素:
本发明提供一种游戏热更新方法、装置和存储介质,用于改进现有游戏热更新方案不适用于ios平台的问题。
本发明第一方面提供一种游戏热更新方法,包括:
获取第一数据模板,所述第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板;
获取所述第一游戏功能组件对应的第一框架预制体;
根据所述第一数据模板和所述第一框架预制体,获取所述第一游戏功能组件;
加载所述第一游戏功能组件对所述游戏进行热更新。
可选的,所述方法包括:
从预设服务器获取所述第一游戏功能组件对应的逻辑执行指示数据;
将所述逻辑执行指示数据绑定到所述第一游戏功能组件。
可选的,所述方法包括:
根据用户输入的常量,设置所述第一游戏功能组件。
可选的,所述获取第一数据模板之前,所述方法还包括:
接收预设服务器发送的数据模板标识,所述数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识;
从所述预设服务器获取所述数据模板标识对应的所述数据模板;
从所述预设服务器获取所述游戏功能组件对应的框架预制体。
可选的,所述从所述服务器获取所述游戏功能组件对应的框架预制体,包括:
获取所述游戏功能组件类型;
若所述游戏功能组件类型为预设组件类型,从所述服务器获取所述游戏功能组件对应的框架预制体。
可选的,所述根据所述第一数据模板和所述第一框架预制体,获取所述第一游戏功能组件,包括:
按照预设解析规则,从所述第一数据模板中解析得到所述第一游戏功能组件的布局数据;
创建所述第一游戏功能组件的实例对象;
根据所述第一游戏功能组件的布局数据、所述第一游戏功能组件的实例对象以及所述第一框架预制体,获取所述第一游戏功能组件。
可选的,所述从预设服务器获取所述第一游戏功能组件对应的逻辑执行指示数据,包括:
若所述第一游戏功能组件的属性的值的类型为数据表达式,从所述预设服务器获取所述第一游戏功能组件对应的逻辑执行指示数据;
相应的,
所述将所述逻辑执行指示数据绑定到所述第一游戏功能组件,包括:
根据所述逻辑执行指示数据,设置所述第一游戏功能组件的属性的值。
可选的,所述根据用户输入的常量,设置所述第一游戏功能组件,包括:
若所述第一游戏功能组件的属性的值的类型为常量,将所述用户输入的常量作为所述第一游戏功能组件的属性的值。
可选的,所述方法还包括:
若所述第一游戏功能组件存在子组件,获取所述第一游戏功能组件的子组件的类型;
若所述子组件的类型为预设组件类型,创建所述子组件的实例对象;
根据所述第一游戏功能组件的布局数据,确定所述子组件的布局数据;
以所述第一游戏功能组件为父节点,根据所述子组件的实例对象、所述子组件的布局数据以及所述第一框架预制体,获取所述子组件。
可选的,所述加载所述第一游戏功能组件对所述游戏进行热更新,包括:
加载所述第一游戏功能组件和所述子组件对所述游戏进行热更新。
本发明第二方面提供一种游戏热更新方法,包括:
在游戏的客户端成功安装在终端中并启动时,向所述客户端发送数据模板标识,所述数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识;
根据客户端发送的第一获取请求,将所述数据模板发送给所述客户端;
根据所述客户端发送的第二获取请求,将所述游戏功能组件对应的框架预制体发送给所述客户端。
可选的,所述方法还包括:
根据所述客户端发送的第三获取请求,将第一游戏功能组件对应的逻辑执行指示数据发送给所述客户端。
可选的,所述向所述客户端发送数据模板标识之前,所述方法还包括:
创建可扩展标记语言(extensiblemarkuplanguage,xml)格式的数据模板;
根据预设编译规则,将所述xml格式的数据模板编译为二进制格式的数据模板。
本发明第三方面提供一种客户端,包括:
获取模块,用于获取第一数据模板,所述第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板;
所述获取模块,还用于获取所述第一游戏功能组件对应的第一框架预制体;
所述获取模块,还用于根据所述第一数据模板和所述第一框架预制体,获取所述第一游戏功能组件;
处理模块,用于加载所述第一游戏功能组件对所述游戏进行热更新。
本发明第四方面提供一种服务器,包括:
发送模块,用于在游戏的客户端成功安装在终端中并启动时,向所述客户端发送数据模板标识,所述数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识;
所述发送模块,还用于根据客户端发送的第一获取请求,将所述数据模板标识对应的所述数据模板发送给所述客户端,所述第一获取请求用于获取所述数据模板标识对应的所述数据模板;
所述发送模块,还用于根据所述客户端发送的第二获取请求,将所述游戏功能组件对应的框架预制体发送给所述客户端。
本发明第五方面提供一种终端,包括:
处理器;
存储器,用于存储所述处理器的计算机程序;
其中,所述处理器被配置为通过执行所述计算机程序来实现第一方面任一实现方式提供的游戏热更新方法。
本发明第六方面提供一种服务器,包括:
处理器;
存储器,用于存储所述处理器的计算机程序;
其中,所述处理器被配置为通过执行所述计算机程序来实现第二方面任一实现方式提供的游戏热更新方法。
本发明第七方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一实现方式提供的游戏热更新方法。
本发明第八方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第二方面任一实现方式提供的游戏热更新方法。
本发明实施例提供的游戏热更新方法、装置和存储介质,通过本实施例提供的游戏热更新方法,通过获取第一数据模板,第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板,获取第一游戏功能组件对应的第一框架预制体,根据第一数据模板和第一框架预制体,获取第一游戏功能组件,加载第一游戏功能组件对游戏进行热更新。因此,在进行游戏热更新时,无需引入ios平台不支持的脚本资源和操作,本发明提供的热更新方案能够适用于android和ios平台,提升了用户体验。
附图说明
图1为本发明一实施例提供的游戏热更新系统的应用场景示意图;
图2为本发明一实施例提供的游戏热更新方法流程示意图;
图3为本发明提供的xml格式的数据模板的结构示意图;
图4为本发明另一实施例提供的游戏热更新方法流程示意图;
图5为本发明又一实施例提供的游戏热更新方法流程示意图;
图6为本发明一实施例提供的客户端结构示意图;
图7为本发明一实施例提供的服务器结构示意图;
图8为本发明一实施例提供的终端的结构示意图;
图9为本发明一实施例提供的服务器的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的游戏热更新系统的应用场景示意图。如图1所示,本实施例的系统可以包括:游戏的客户端、游戏的服务器。其中,游戏的客户端安装在终端上,终端可以为智能手机、平板电脑等,本发明对此不做限制。其中,用户可以通过客户端对游戏进行热更新,热更新是指打开应用程序(application,app)时遇到的即时更新。
目前提供的热更新方案是通过lua插件实现和dll实现的,然而,由于ios平台官方规定禁止在应用中使用lua脚本,使用lua插件来实现unity3d平台上游戏的热更新违背了ios的规定,具有一定的被禁风险,并且lua语言运行时解析执行的性能不如c#语言先编译再运行的性能;并且由于ios平台禁止动态编译just-in-timecompiler,不允许客户单游戏下载本地代码nativecode,因此,无法在ios平台使用dll实现游戏的热更新。
针对上述存在的各个问题,本发明实施例提供一种游戏热更新方法,下面通过几个具体实现方式对该游戏热更新方法进行详细说明。
图2为本发明一实施例提供的游戏热更新方法流程示意图。如图1所示,本实施例的执行主体为游戏的客户端,该游戏热更新方法具体包括:
s201:获取第一数据模板。
本实施例中涉及的游戏可以为网络游戏中的任一款游戏,第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板。具体地,第一游戏功能组件对应的数据模板包括第一游戏功能组件的类型对应的数据模板,可选的,可以根据第一游戏功能组件确定对应的第一数据模板,也可以根据第一游戏功能组件的类型确定对应的第一数据模板。
在实际应用中,当游戏的客户端成功安装在终端中并启动时,客户端可以从服务器获取每个需要进行热更新的游戏功能组件对应的数据模板,这里需要进行热更新的游戏功能组件包括第一游戏功能组件,接着根据需要进行热更新的第一游戏功能组件,获取第一游戏功能组件对应的第一数据模板,或者,根据第一游戏功能组件的类型,从服务器获取第一数据模板。
s202:获取第一游戏功能组件对应的第一框架预制体。
框架预制体是组件加载的容器,挂载有该类组件的管理类c#脚本,组件的管理类c#脚本包含有该类组件的加载、退出和子组件管理等通用方法。当游戏的客户端成功安装在终端中并启动时,客户端可以从服务器获取需要每个进行热更新的游戏功能组件对应的框架预制体,在对第一游戏功能进行热更新时,从全部框架预制体中,确定第一游戏功能的组件对应的框架预制体。其中,第一游戏功能组件对应的第一框架预制体,包括:第一游戏功能组件的类型对应的第一框架预制体。具体的,可以根据第一游戏功能组件确定对应的第一框架预制体,也可以根据第一游戏功能组件的类型确定对应的第一框架预制体。
s203:根据第一数据模板和第一框架预制体,获取第一游戏功能组件。
具体地,由于第一数据模板的格式为二进制格式,可以按照预设解析规则,对第一数据模板进行解析,得到xml格式的第一数据模板,从xml格式的第一数据模板中得到第一游戏功能组件的布局数据,并根据第一游戏功能组件的类型,创建第一游戏功能组件的实例对象,然后根据第一游戏功能组件的布局数据、所述第一游戏功能组件的实例对象,以及第一框架预制体获取第一游戏功能组件。其中,游戏功能组件的布局数据包括组件样式、大小、层级等信息。
s207:加载第一游戏功能组件对游戏进行热更新。
设置完成第一游戏功能组件的属性的值后,加载第一游戏功能组件实现对游戏的热更新。
需要说明的是,本实施例以该需要进行热更新的游戏功能组件只包括第一游戏功能组件为例进行说明,在实际应用时,需要进行热更新的游戏功能组件包括至少一个功能组件,比如第二游戏功能组件、第三游戏功能组件等。若需要进行热更新的游戏功能组件的数目为多个,则参考上述第一游戏功能组件的方式完成对所有游戏功能组件的加载,以实现游戏的热更新。
本实施例提供的游戏热更新方法,通过获取第一数据模板,第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板,获取第一游戏功能组件对应的第一框架预制体,根据第一数据模板和第一框架预制体,获取第一游戏功能组件,若第一游戏功能组件的属性的值的类型为数据表达式,客户端从预设服务器获取第一游戏功能组件对应的逻辑执行指示数据,客户端将逻辑执行指示数据绑定到第一游戏功能组件,若第一游戏功能组件的属性的值的类型为常量,客户端根据用户输入的常量,设置第一游戏功能组件,加载第一游戏功能组件对游戏进行热更新。因此,在进行游戏热更新时,无需引入ios平台不支持的脚本资源和操作,采用的数据模板和框架预制体均采用unity3d官方推荐的c#语言编写,保持了unity3d采用c#开发的性能优势,能够适用于android和ios平台,提升了用户体验。
在可选的实施例中,该游戏热更新方法在步骤s207之前还包括步骤s204-s205。
s204:从预设服务器获取第一游戏功能组件对应的逻辑执行指示数据。
首先根据第一游戏功能组件的布局数据,获取第一游戏功能组件的属性,第一游戏功能组件的属性包括公有属性和专有属性,公有属性是指unity3d官方的组件都具有的属性,例如id类型、长宽等属性,专有属性为该类组件特有的属性。组件的布局数据包括组件的属性。
通常组件的属性以键值对的形式存在,组件的键通常是固定的,这是由于特定组件的布局数据是固定的。参考图3进行详细说明,图3为本发明提供的xml格式的数据模板的结构示意图,如图3所示,文本组件的“组件的布局方式”、“文本内容”、“大小信息”等就是“键”,而“键”里的赋的值为“属性的值”;同样,按钮组件的“组件的布局方式”、“按钮的图片链接地址”、“是否可点击”表示“键”,“键”里赋的值为“属性的值”。
举例来说,若图3中按钮组件的键“图片的链接地址”对应的值的类型为数据表达式,则向服务器发送第三获取请求,以使服务器将逻辑执行指示数据发送给客户端,相应的,客户端从服务器获取逻辑执行指示数据,将该逻辑执行指示数据对应地绑定到数据表达式上,从而确定属性的值。
在本实施例中,获取第一游戏功能组件的属性的值的类型,若第一游戏功能组件的属性的值的类型为数据表达式,从预设服务器获取第一游戏功能组件对应的逻辑执行指示数据。
s205:将逻辑执行指示数据绑定到第一游戏功能组件。
在本实施例中,客户端根据逻辑执行指示数据,设置第一游戏功能组件的属性的值,具体地,将逻辑执行指示数据赋值给第一游戏功能组件的属性的值。
举例来说,若图3中按钮组件的键“图片的链接地址”对应的值的类型为数据表达式,客户端从服务器获取逻辑执行指示数据,将该逻辑执行指示数据对应地绑定到数据表达式上,从而确定组件的属性的值。这样,在进行游戏热更新时,无需引入ios平台不支持的脚本资源和操作,实现代码逻辑的热更新,能够适用于android和ios平台,提升了用户体验。
在可选的实施例中,该游戏热更新方法在步骤s207之前还包括步骤s206。s206:根据用户输入的常量,设置第一游戏功能组件。
若第一游戏功能组件的属性的值的类型为常量,将用户输入的常量作为第一游戏功能组件的属性的值,对于常量的具体取值,可以根据经验选取,或者结合各种因素,设定一个常量,以使游戏热更新性能最好。
图4为本发明另一实施例提供的游戏热更新方法流程示意图,如图4所示,在上述实施例的基础上,该游戏热更新方法还包括:
s301:服务器创建xml格式的数据模板。
具体地,服务器利用unity3d平台添加基础组件,根据预设协议规则,设置这些组件的布局数据,布局数据包括样式、大小、层级等信息,完成编辑后,可导出xml格式的数据模板,xml格式的数据模板支持可视化编辑、导入以及导出。其中,一类组件可以对应一个xml数据模板,按照类型划分,组件分为文本组件、按钮组件、列表组件等。
由图3可知,对话框以垂直线性布局来组织一个文本组件和一个按钮组件的。文本组件的布局数据包括组件的布局方式、文本的内容信息、大小信息、颜色信息、组件的宽度信息以及组件的高度信息。其中,组件的布局方式包括垂直布局和水平布局。
按钮组件的布局数据包括组件的布局方式、按钮的图片链接地址、是否可点击、点击相应链接、组件的宽度信息以及组件的高度信息。
s302:服务器根据预设编译规则,将xml格式的数据模板编译为二进制格式的数据模板。
由于xml格式的数据模板包括有很多空格、换行符等冗余信息和重复的字符信息,导致xml格式的数据模板体积大、解析性能较低,为了节省流量和性能的考虑,按照预设编译规则,服务器将每个xml格式的数据模板编译为二进制格式的数据模板,并将二进制格式的数据模板打包成assetbundle文件发布至内容分发网络(contentdeliverynetwork,cdn)进行存储。
s303:在游戏的客户端成功安装在终端中并启动时,服务器向客户端发送数据模板标识。数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识。
在游戏的客户端成功安装在终端中,并在第一次启动时,服务器向客户端发送需要进行热更新的游戏功能组件对应的数据模板的数据模板的标识,该标识为该数据模板的唯一身份。相应的,在游戏的客户端启动时,客户端接收服务器发送的数据模板标识,这时安装游戏客户端的终端可以提示是否需要更新。
s304:根据客户端发送的第一获取请求,服务器将数据模板标识对应的数据模板发送给客户端。
客户端接收到服务器发送的数据模板标识后,根据该数据模板标识,向服务器发送第一获取请求,第一获取请求用于获取数据模板标识对应的数据模板,服务器接收到该第一获取请求后,将数据模板标识对应的数据模板发送给客户端。相应的,客户端从服务器获取数据模板标识对应的数据模板。在实际应用中,当终端提示是否需要更新时,如果用户点击的是,则开始从服务器获取数据模板。
s305:服务器根据客户端发送的第二获取请求,将游戏功能组件的对应的框架预制体发送给客户端。
具体地,客户端获取需要进行热更新的游戏功能组件类型,若该游戏功能组件类型为预设组件类型,向服务器发送第二获取请求,用于请求获取游戏功能组件类型对应的框架预制体,服务器根据该第二获取请求,将需要进行热更新的游戏功能组件对应的框架预制体发送客户端。
预设组件类型可以为文本组件、按钮组件、列表组件等,若游戏功能组件的类型不是预设组件类型,则无需进行下面的步骤,判断热更新失败,可选的,向用户推送热更新失败的消息。
s306:客户端获取第一数据模板。第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板。
在本实施例中,客户端将所有需要进行热更新的数据模板保存在本地,当需要对第一游戏功能组件类型进行热更新时,从全部的数据模板中,获取第一游戏功能组件对应的二进制格式的数据模板,具体地,可以根据第一游戏功能组件确定对应的第一数据模板,也可以根据第一游戏功能组件的类型确定对应的第一数据模板。
s307:客户端获取第一游戏功能组件对应的第一框架预制体。
在本实施例中,客户端可以从本地保存的所有的框架预制体中,获取第一游戏功能组件对应的第一框架预制体,可以根据第一游戏功能组件确定对应的第一框架预制体,也可以根据第一游戏功能组件的类型确定对应的第一框架预制体。
s308:根据第一数据模板和第一框架预制体,获取第一游戏功能组件。
s309:加载第一游戏功能组件对游戏进行热更新。
本实施例中,s308-s309的具体实现过程可以参见图2所示实施例的相关描述,此处不再赘述。
本实施例提供的游戏热更新方法,服务器创建xml格式的数据模板,服务器根据预设编译规则,将xml格式的数据模板编译为二进制格式的数据模板,在游戏的客户端成功安装在终端中并启动时,服务器向客户端发送数据模板标识,根据客户端发送的第一获取请求,服务器将数据模板标识对应的数据模板发送给客户端,服务器根据客户端发送的第二获取请求,将游戏功能组件对应的框架预制体发送给客户端。采用xml格式的数据模板可以方便地创建各类业务组件的数据模板,将xml格式的组件数据模板编译成二进制格式的数据模板,可以降低网络下载流量和提高解析性能。同时,实现了在玩家不换安装包的情况下对游戏进行热更新,且游戏组件运行过程中使用unity3d的原生组件,可以最大的减少组件加载和渲染的性能损失。
图5为本发明又一实施例提供的游戏热更新方法流程示意图,如图5所示,在上述实施例的基础上,若第一游戏功能组件存在子组件,本实施例的执行主体为游戏的客户端,该游戏热更新方法还包括:
s401:根据第一游戏功能组件的布局数据,获取第一游戏功能组件的子组件的类型。
s402:若子组件的类型为预设组件类型,创建子组件的实例对象。
s403:根据第一游戏功能组件的布局数据,确定子组件的布局数据。
在本实施例中,通过第一游戏功能组件的布局数据,确定子组件的类型,若子组件为预设组件类型,可以参考图2所示实施例的相关描述,创建子组件的实例对象,此处不再赘述。
本领域技术人员需要理解,游戏功能组件的布局数据包括该游戏功能组件的所有子组件的布局数据,因此,可以根据第一游戏功能组件的布局数据,确定子组件的布局数据。
s404:以第一游戏功能组件为父节点,根据子组件的实例对象、子组件的布局数据,以及第一框架预制体构建子组件。
在本实施例中,以第一游戏功能组件为父节点,以第一框架预制体为加载容器,根据子组件的实例对象、子组件的布局数据,构建第一游戏功能子组件。
s405:从预设服务器获取子组组件对应的逻辑执行指示数据。
s406:将逻辑执行指示数据绑定到子组件。
s407:根据用户输入的常量,设置子组件。
s405-s407的具体实现过程可以参见图2所示实施例的相关描述,此处不再赘述。
s408:加载第一游戏功能组件和子组件对游戏进行热更新。
在实际应用中,子组件的数目可以为多个,重复上述步骤,直至设置完成所有子组件,然后加载第一游戏功能组件和子组件完成对游戏的热更新。
可选的,加载第一游戏功能组件和子组件对游戏进行热更新后,客户端上可以显示新的游戏功能界面,比如,热更新后,文本框大小发生了改变。
本实施例提供的游戏热更新方法,若第一游戏功能组件存在子组件,客户端根据第一游戏功能组件的布局数据,获取第一游戏功能组件的子组件的类型,若子组件的类型为预设组件类型,客户端创建子组件的实例对象,根据第一游戏功能组件的布局数据,确定子组件的布局数据,客户端以第一游戏功能组件为父节点,根据子组件的实例对象、子组件的布局数据,以及第一框架预制体构建子组件,客户端从预设服务器获取子组组件对应的逻辑执行指示数据,客户端逻辑执行指示数据绑定到子组件,客户端根据用户输入的常量,设置子组件,加载第一游戏功能组件和子组件对游戏进行热更新。在进行游戏热更新时,无需引入ios平台不支持的脚本资源和操作,采用的数据模板和框架预制体均采用unity3d官方推荐的c#语言编写,保持了unity3d采用c#开发的性能优势,能够适用于android和ios平台,提升了用户体验。
图6为本发明一实施例提供的客户端结构示意图。如图6所示,该游戏的客户端60包括:获取模块601、处理模块602和接收模块603。
获取模块601,用于获取第一数据模板,所述第一数据模板为需要进行热更新的第一游戏功能组件对应的二进制格式的数据模板;
所述获取模块601,还用于获取所述第一游戏功能组件对应的第一框架预制体;
所述获取模块601,还用于根据所述第一数据模板和所述第一框架预制体,获取所述第一游戏功能组件;
处理模块602,用于加载所述第一游戏功能组件对所述游戏进行热更新。
可选的,所述获取模块601,还用于:
从预设服务器获取所述第一游戏功能组件对应的逻辑执行指示数据;
所述处理模块602,还用于将所述逻辑执行指示数据绑定到所述第一游戏功能组件。
可选的,所述处理模块602,还用于:
根据用户输入的常量,设置所述第一游戏功能组件。
可选的,还包括:
接收模块603,用于接收预设服务器发送的数据模板标识,所述数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识;
所述获取模块601,还用于从所述预设服务器获取所述数据模板标识对应的所述数据模板;
从所述预设服务器获取所述游戏功能组件对应的框架预制体。
可选的,所述获取模块601,具体用于:
获取所述游戏功能组件类型;
若所述游戏功能组件类型为预设组件类型,从所述服务器获取所述游戏功能组件对应的框架预制体。
可选的,所述获取模块601,具体用于:
按照预设解析规则,从所述第一数据模板中解析得到所述第一游戏功能组件的布局数据;
创建所述第一游戏功能组件的实例对象;
根据所述第一游戏功能组件的布局数据、所述第一游戏功能组件的实例对象以及所述第一框架预制体,获取所述第一游戏功能组件。
可选的,所述获取模块601,具体用于:
若所述第一游戏功能组件的属性的值的类型为数据表达式,从所述预设服务器获取所述第一游戏功能组件对应的逻辑执行指示数据;
所述处理模块602,具体用于:
根据所述逻辑执行指示数据,设置所述第一游戏功能组件的属性的值。
可选的,所述处理模块602,具体用于:
若所述第一游戏功能组件的属性的值的类型为常量,将所述用户输入的常量作为所述第一游戏功能组件的属性的值。
可选的,所述获取模块601,还用于:
若所述第一游戏功能组件存在子组件,获取所述第一游戏功能组件的子组件的类型;
所述处理模块602,还用于:
若所述子组件的类型为预设组件类型,创建所述子组件的实例对象;
根据所述第一游戏功能组件的布局数据,确定所述子组件的布局数据;
所述获取模块601,还用于:
以所述第一游戏功能组件为父节点,根据所述子组件的实例对象、所述子组件的布局数据以及所述第一框架预制体,获取所述子组件。
可选的,所述处理模块602,具体用于:
加载所述第一游戏功能组件和所述子组件对所述游戏进行热更新。
本实施例的客户端,可以用于执行上述各方法实施例中客户端的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本发明一实施例提供的服务器结构示意图。如图7所示,该服务器70包括:发送模块701、处理模块702。
发送模块701,用于在游戏的客户端成功安装在终端中并启动时,向所述客户端发送数据模板标识,所述数据模板标识为需要进行热更新的游戏功能组件对应的二进制格式的数据模板的标识;
所述发送模块701,还用于根据客户端发送的第一获取请求,将所述数据模板标识对应的所述数据模板发送给所述客户端,所述第一获取请求用于获取所述数据模板标识对应的所述数据模板;
所述发送模块701,还用于根据所述客户端发送的第二获取请求,将所述游戏功能组件对应的框架预制体发送给所述客户端。
可选的,所述发送模块,还用于:
根据所述客户端发送的第三获取请求,将第一游戏功能组件对应的逻辑执行指示数据发送给所述客户端。
可选的,还包括:
处理模块702,用于创建可扩展标记语言xml格式的数据模板;
根据预设编译规则,将所述xml格式的数据模板编译为二进制格式的数据模板。
本实施例的服务器,可以用于执行上述各方法实施例服务器的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本发明一实施例提供的终端的结构示意图,如图8所示,该终端80至少包括:
处理器801;
存储器802,用于存储所述处理器的计算机程序;
其中,所述处理器801被配置为通过执行所述计算机程序来实现前述方法实施例中客户端执行的客户端的任一实现方式提供的游戏热更新方法。
图9为本发明一实施例提供的服务器的结构示意图。如图9所示,该服务器90至少包括:
处理器901;
存储器902,用于存储所述处理器的计算机程序;
其中,所述处理器901被配置为通过执行所述计算机程序来实现前述方法实施例中服务器执行的服务器的任一实现方式提供的游戏热更新方法。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中客户端的任一实现方式提供的游戏热更新方法。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中服务器的任一实现方式提供的游戏热更新方法。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取存储器(英文:randomaccessmemory,简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。