手游热更新方法

文档序号:9727163阅读:868来源:国知局
手游热更新方法
【技术领域】
[0001 ]本发明涉及计算机应用领域,尤其是一种手游热更新方法。
【背景技术】
[0002]当前,通常用Unity3D来开发各种游戏。由于Unity3D的非开源性,Unity3D项目在手机平台上的程序和资源热更新可能成为困扰很多团队顺利开发游戏产品的主要技术瓶颈之一。
[0003]Unity3D的游戏逻辑运行代码是以DLL(Dynamic Link Library,动态链接库)文件形式储存于APK之中的aAndroid系统下APK(Android Package ,Android安装包)在安装后是无法写入新的文件并重新打包的。因此,如果需要修改可执行的DLL文件,由于所述DLL文件的加载路径被确定在APK中,只能以重装APK的方法来实现。而重装APK对手游玩家来说是一种流失的重要风险。
[0004]同时,在Unity3D机制下,运行代码和资源是不能同时更新的,从而导致了无法实现游戏分区更新和版本回退。分区更新对于项目研发有着重要的意义:它使项目组可以在每个版本全面推出之前,在部分服务器对于新功能进行试点;考察更新对于游戏数值平衡性的影响;监控是否有大规模的程序稳定性异常。版本回退对于玩家来说也有重要的意义,对于已经进入高版本服务器的玩家可以通过选择低版本的服务器,回退本地游戏资源进入低版本服务器进行游戏,而不会出现由于服务器版本选择错误,无法退回原来版本的尴尬。

【发明内容】

[0005]本发明的目的在于提供一种手游热更新方法,以解决Unity3D的游戏运行代码和资源不能同时热更新,而导致的无法实现游戏分区更新和版本回退的问题。
[0006]为了达到上述目的,本发明提供了一种手游热更新方法,包括:修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新;
[0007]修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配。
[0008]优选的,在上述的手游热更新方法中,通过Hook方式修改所述运行代码的加载路径。
[0009]优选的,在上述的手游热更新方法中,所述运行代码以DLL文件形式存储在APK中,通过修so文件以实现DLL文件的加载路径。
[0010]优选的,在上述的手游热更新方法中,通过修改Iibmon0.SO文件以实现修改DLL文件的加载路径。
[0011]优选的,在上述的手游热更新方法中,通过修改1;[131]10110.80文件中的1]10110_;[11^6_open_from_data_with_name函数以实现修改DLL文件的加载路径,使得所述DLL文件按照指定目录加载。
[0012I优选的,在上述的手游热更新方法中,修改Unity成员变量的序列化方式的步骤包括:
[0013]取消记录在APK中的Unity成员变量的序列化顺序;
[0014]自定义Unity成员变量的序列化顺序。
[0015]优选的,在上述的手游热更新方法中,取消记录在APK中的Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,打开NONE_SEARIALIZE编译开关,以关闭Unity自定义的数据序列化功能。
[0016]优选的,在上述的手游热更新方法中,自定义Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,将SerialBehav1r的对象数据导出为自定义的Unity成员变量的序列化数据。
[0017]优选的,在上述的手游热更新方法中,所述自定义的Unity成员变量的序列化数据以.bytes文件形式存储。
[0018]在本发明提供的手游热更新方法中,通过修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。然后再修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配,从而实现所述运行代码和资源的热更新,使得游戏分区更新和版本回退得以实现。提高了游戏开发的效率,也提高了游戏玩家的体验。
【附图说明】
[0019]图1为本发明实施例中手游热更新方法的流程图;
[0020]图2为本发明实施例中通过手游热更新方法而实现Unity3D游戏热更新的流程图。
【具体实施方式】
[0021]下面将结合示意图对本发明的【具体实施方式】进行更详细的描述。根据下列描述和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
[0022]本发明实施例提供了一种手游热更新方法,具体的,如图1所示,包括:
[0023]SI:修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。
[0024]在Android系统中,Unity3D的游戏逻辑代码是以DLL文件形式存储在APK中,而APK一旦安装则无法修改。因此,为了实现可执行文件的动态更新替换,即DLL文件的热更新,必须避开从APK加载的方式,而采用从外部目录加载的方式。
[°°25]申请人经过研究发现,所述DLL文件的加载是通过I ibmon0.so文件中的mono_image_open_from_data_with_name函数实现的。只需要将所述DLL文件的载入函数进行修改替换,就可以达到修改所述DLL文件的加载路径的目的。
[0026]进一步的,通过Hook运行时修改代码的方式实现了libmon0.so文件中的载入函数mono_image_open_from_data_with_name的替换。在替换文件中自定义所述DLL文件的加载路径,使得所述DLL文件按照指定目录加载,从而实现所述运行代码按照指定目录加载。从而使得在APK安装后,可以加载DLL文件,以实现DLL文件的热更新,即所述运行代码的热更新。
[0027]在本实施例中,所述Iibmon0.so文件是基于C++语言开发的,所述DLL文件是基于C#语言开发的,所述DLL文件的下载过程是通过JAVA语言实现的。在本发明的其他实施例中,所述I ibmon0.so文件还可以基于C或者其他计算机语言进行开发,所述DLL文件还可以基于C/C++、JAVA或者其他计算机语言进行开发,同样,所述DLL文件的下载过程也可以通过C#语言、C/C++或者其他计算机语言进行开发,在此不再赘述。
[0028]S2:修改Unity成员变量的序列化方式
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1