本申请涉及互联网技术领域,尤其涉及一种由unity到ios的封装方法及装置。
背景技术:
随着互联网技术的发展,基于互联网的直播技术越来越广泛。用户界面(userinterface,ui)是开发直播应用的重要环节,好的ui可以提高直播效果,增进用户与主播之间的互动性,提升直播房间的人气,增加直播应用的用户流量。
在现有技术的基础上,如何进一步开发更加丰富多彩、支持更酷更炫动画效果的ui是开发直播应用急需解决的问题。
技术实现要素:
面对直播应用开发过程中急需解决的问题,本申请发明人经过反复思考和研究提出一种解决思路,即在直播应用中融合unity,利用unity实现直播应用中的ui。其中,unity是一种跨平台可视化的游戏引擎,主要用于开发游戏。
直播应用除了包括ui,还包括与ui互访的底层业务逻辑。在一种应用场景中,底层业务逻辑基于ios实现。ios是由苹果公司开发的移动操作系统。基于此,在直播应用中融合unity,实际上是unity与ios之间的融合,这就需要解决基于ios实现的底层业务逻辑与基于unity实现的ui之间互访的问题。
针对上述技术问题,本申请实施例提供一种封装方法及装置,用以解决基于ios实现的底层业务逻辑与基于unity实现的ui之间互访的问题。
本申请实施例提供一种由unity到ios的封装方法,包括:
在支持unity的开发环境中,创建一unity工程,所述unity工程提供直播应用的界面功能;
以ios为导出平台,从所述unity工程中导出一基础ios工程;
在支持ios的开发环境中,创建一静态库类型的原生ios工程;
将所述基础ios工程中的库文件和类文件全部复制到所述原生ios工程中;
在所述原生ios工程的启动文件中添加对unityappcontroller的引用;
编译所述原生ios工程,以输出继承所述unity工程全部特性的ios文件。
在一可选实施方式中,所述将所述基础ios工程中的库文件和类文件全部复制到所述原生ios工程中,包括:
在所述原生ios工程的根目录下,新建库文件夹和类文件夹,并将所述基础ios工程中的库文件和类文件分别复制到所述库文件夹和类文件夹中;或者
直接将所述基础ios工程中的库文件夹和类文件夹分别复制到所述原生ios工程的根目录下。
在一可选实施方式中,所述以ios为导出平台,从所述unity工程中导出一基础ios工程,包括:
通过编译设置项,选择所述导出平台为ios;
编译所述unity工程,以输出所述基础ios工程。
在一可选实施方式中,所述在所述原生ios工程的启动文件中添加对unityappcontroller的引用,包括:
打开所述原生ios工程的启动文件的编辑界面;
通过所述编辑界面,添加对unityappcontroller的引用。
在一可选实施方式中,所述方法还包括:
创建所述ios文件与所述直播应用的底层业务逻辑之间的调用关系;
根据所述ios文件和所述调用关系,开发所述直播应用。
本申请实施例还提供一种由unity到ios的封装装置,包括:
unity创建单元,用于在支持unity的开发环境中,创建一unity工程,所述unity工程提供直播应用的界面功能;
导出单元,用于以ios为导出平台,从所述unity工程中导出一基础ios工程;
ios创建单元,用于在支持ios的开发环境中,创建一静态库类型的原生ios工程;
复制单元,用于将所述基础ios工程中的库文件和类文件全部复制到所述原生ios工程中;
修改单元,用于在所述原生ios工程的启动文件中添加对unityappcontroller的引用;
ios编译单元,用于编译所述原生ios工程,以输出继承所述unity工程全部特性的ios文件。
在一可选实施方式中,所述复制单元具体用于:
在所述原生ios工程的根目录下,新建库文件夹和类文件夹,并将所述基础ios工程中的库文件和类文件分别复制到所述库文件夹和类文件夹中;或者
直接将所述基础ios工程中的库文件夹和类文件夹分别复制到所述原生ios工程的根目录下。
在一可选实施方式中,所述导出单元具体用于:通过编译设置项,选择所述导出平台为ios;编译所述unity工程,以输出所述基础ios工程。
在一可选实施方式中,所述修改单元具体用于:打开所述原生ios工程的启动文件的编辑界面;通过所述编辑界面,添加对unityappcontroller的引用。
在一可选实施方式中,所述装置还包括:应用开发单元,用于创建所述ios文件与所述直播应用的底层业务逻辑之间的调用关系,以及根据所述ios文件和所述调用关系,开发所述直播应用。
在本申请实施例中,基于unity开发用于提供直播应用的界面功能的unity工程,将该工程导出为基础ios工程,在支持ios的开发环境中,创建一静态库类型的原生ios工程,通过将基础ios工程中的库文件和类文件全部复制到原生ios工程中,并在原生ios工程的启动文件中添加对unityappcontroller的引用,然后编译原生ios工程,以获得继承unity工程全部特性的ios文件,从而将unity工程封装成ios模块,为unity与ios的结合应用提供了条件,以便于在基于ios的直播应用中融合unity,丰富直播应用的ui。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请一实施例提供的由unity到ios的封装方法的流程示意图;
图1b为本申请一实施例提供的原生ios工程的根目录下包含libraries文件夹的示意图;
图1c为本申请一实施例提供的原生ios工程的启动文件的一种编辑界面示意图;
图2为本申请又一实施例提供的由unity到ios的封装装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了在直播应用中,提供更加丰富多彩、支持更酷更炫动画效果的ui,本申请发明人想到利用unity开发直播应用的ui。unity是一种跨平台可视化的游戏引擎,能够开发出丰富多彩的ui,还可以开发出2d或3d的ui。因此,利用unity开发直播应用的ui,可以解决直播应用面临的界面问题。
直播应用除了包括ui,还包括与ui层互访的底层业务逻辑。在一种应用场景中,底层业务逻辑基于ios实现。基于此,利用unity开发直播应用的ui,需要解决基于ios实现的底层业务逻辑与基于unity实现的ui之间互访的问题。
针对上述技术问题,本申请发明人提供一种解决方案,主要原理是:将unity工程封装成ios模块,从而将基于ios实现的底层业务逻辑与基于unity实现的ui之间的互访,转换成ios模块之间的互访。
值得说明的是,本申请各实施例提供的由unity到ios的封装方法,可应用于直播应用,从而将实现直播应用中的ui的unity工程封装为ios模块,但并不限于直播应用。凡是基于ios的应用与unity相结合时,均可采用本申请实施例提供的封装方法将其中的unity工程封装为ios模块。
图1a为本申请一实施例提供的由unity到ios的封装方法的流程示意图。如图1a所示,所述方法包括:
101、在支持unity的开发环境中,创建一unity工程,所述unity工程提供直播应用的界面功能。
102、以ios为导出平台,从所述unity工程中导出一基础ios工程。
103、在支持ios的开发环境中,创建一静态库类型的原生ios工程。
104、将基础ios工程中的库(library)文件和类(class)文件全部复制到原生ios工程中。
105、在原生ios工程的启动文件中添加对unityappcontroller的引用。
106、编译原生ios工程,以输出继承unity工程全部特性的ios文件。
在步骤101中,通过unity开发直播应用的界面功能,即在支持unity的开发环境中,创建一提供直播应用的界面功能的unity工程。
其中,可以自行搭建支持unity的开发环境,具体搭建过程可参照现有unity开发环境进行。或者,也可以采用现有支持unity的开发环境,例如,unity5.4.1f1(64-bit)。
可选地,可以根据直播应用的界面设计需求,在支持unity的开发环境中开发unity工程。这里的界面设计需求主要描述直播应用的ui的布局样式、动画渲染、交互方式以及输入输出方式等内容。换言之,基于界面设计需求,可以明确需要实现的ui的布局样式、动画渲染、交互方式以及输入输出方式等内容。据此,可以在支持unity的开发环境中,创建unity工程。所创建的unity工程可实现满足所述界面设计需求的直播界面。
在直播应用中,unity工程实现的ui主要包括:直播首页,首页下的各频道页,各频道页下由直播间图标构成的直播间列表,直播间列表展示样式,用户进入直播间的交互方式,直播间界面上的主播视频、动画、虚拟礼物、用户头像、主播等级等展示,等等。
在步骤102中,可以ios为导出平台,从unity工程中导出一基础ios工程,以便以该基础ios工程为基础对unity功能进行ios封装。值得说明的是,为便于区分,将由unity工程导出的ios工程称为基础ios工程。
基于unity开发环境提供的编译器或者外部独立的编译器,编程人员对unity工程进行编译。编译器一般会提供编译设置项,以供编程人员进行编译设置,例如导出平台选择、编译方式选择等。可选地,可以通过编译设置项,选择导出平台为ios;然后,编译unity工程,以输出基础ios工程。
进一步可选地,可以采用mono2x编译器对上述unity工程进行编译,以输出cli格式的unity文件。
在步骤103中,需要在支持ios的开发环境中,创建一静态库类型的原生ios工程。
根据应用场景的不同,支持ios的开发环境也会有所不同。其中,可以自行搭建支持ios的开发环境。自行搭建支持ios的开发环境主要包括:根据使用的操作系统,进行相关配置;下载并安装ios_sdk及开发工具x-code。ios_sdk是ios软件开发工具包,是一个应用程序接口(applicationprograminterface,api)和开发工具集,面向对象的c开发人员可以用它来创建原生的ios应用程序。x-code是开发ios必备的开发工具,运行在操作系统macosx上的集成开发工具(ide),是开发ios应用程序最快捷的方式。x-code具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。或者,也可以采用已搭建完成的ios开发环境。
在步骤103中,所创建的原生ios工程实际上是一个工程框架,并未包含任何应用相关的内容或逻辑,是为了封装unity工程而创建。其中,应用相关的内容或逻辑均在unity工程中实现。可选地,在一应用场景中,由unity工程实现的应用相关的内容或逻辑主要为直播应用中与ui相关的内容或逻辑,例如包括界面的布局样式、交互方式以及输入输出方式等。
在步骤104中,将由unity工程导出的基础ios工程中的library文件和class文件全部复制到步骤103中创建的原生ios工程中,这是实现将unity工程封装成ios模块的主要步骤。
由unity工程导出的基础ios工程中的library文件主要是指unity系统中的一些库文件;相应地,class文件主要是一些基础框架类文件,主要负责构建一个程序的框架。
可选地,在基础ios工程和原生ios工程中,可以采用库文件夹(例如libraries文件夹)管理各自的library文件。基于此,可以从基础ios工程的libraries文件夹中拷贝library文件,并全部复制到原生ios工程的libraries文件夹中。为便于区分,可将基础ios工程的库文件夹称之为a_lib,将原生ios工程的库文件夹称之为b_lib。
进一步可选地,若在创建原生ios工程时,并未建立其libraries文件夹,则可以先在原生ios工程的根目录下,新建一libraries文件夹;然后,将基础ios工程中的library文件全部复制到新建的libraries文件夹中。如图1b所示,为原生ios工程的根目录下包含libraries文件夹的示意图。
相应地,在基础ios工程和原生ios工程中,可以采用类文件夹(例如classes文件夹)管理各自的class文件。基于此,可以从基础ios工程的classes文件夹中拷贝class文件,并全部复制到原生ios工程的classes文件夹中。为便于区分,可将基础ios工程的classes文件夹称之为a_class,将原生ios工程的classes文件夹称之为b_class。
进一步可选地,若在创建原生ios工程时,并未建立其classes文件夹,则可以先在原生ios工程的根目录下,新建一classes文件夹;然后,将基础ios工程中的class文件全部复制到新建的classes文件夹中。如图1b所示,为原生ios工程的根目录下包含classes文件夹的示意图。
在步骤105中,在原生ios工程的启动文件中添加对unityappcontroller的引用,以便于实现unity与ios的结合。
unityappcontroller是unity下的一个控制器,是unity(例如unity3d)的加载入口。通过unityappcontroller可以加载unity工程实现的一切功能,例如模型、动画渲染等。unityappcontroller中提供了很多我们可以直接调用的属性。
原生ios工程的启动文件主要是指main.m(或main.mm)文件,但不限于此。
在原生ios工程的启动文件中添加对unityappcontroller的引用之后,原生ios工程将会从unityappcontroller开始,通过unityappcontroller可以加载unity工程实现的一切功能,进而得到一个继承了unity工程所有特性的ios工程。
可选地,可以打开原生ios工程的启动文件的编辑界面;通过该编辑界面,添加对unityappcontroller的引用。如图1c所示,为原生ios工程的启动文件的一种编辑界面。在图1c所示编辑界面中,方框所示位置为添加对unityappcontroller的引用的代码位置。
在步骤106中,编译上述添加对unityappcontroller的引用的原生ios工程,以输出一后缀为.a的ios文件。该后缀为.a的ios文件继承了上述unity工程的全部特性,至此将unity工程封装为一ios文件。
可选地,可以采用xcode工具对原生ios工程进行编译,并输出编译结果,即后缀为.a的ios文件。
可选地,基础ios工程可以采用但不限于:java语言。
在实际应用中,该后缀为.a的ios文件可作为标准的ios模块,被集成到其它基础ios工程使用。
在本实施例中,基于unity开发提供直播应用的界面功能的unity工程,并该工程导出为基础ios工程,在支持ios的开发环境中,创建一静态库类型的原生ios工程,通过将基础ios工程中的库文件和类文件全部复制到原生ios工程中,并在原生ios工程的启动文件中添加对unityappcontroller的引用,然后编译原生ios工程,以获得继承unity工程全部特性的ios文件,从而将unity工程封装成ios模块,为unity与ios的结合应用提供了条件,以便于在基于ios的直播应用中融合unity,丰富直播应用的ui。
以上述由unity到ios的封装方法为基础,在直播应用中,可采用unity开发直播应用中的ui层,然后采用上述实施例提供的方法将unity开发的直播应用的ui层封装成ios文件,并嵌入基于ios开发的直播应用中,创建所述ios文件与直播应用的底层业务逻辑之间的调用关系;根据所述ios文件和所述调用关系,开发直播应用,从而得到一种界面内容和样式更加丰富,且可以支持更酷更炫动画,甚至支持3d效果的直播应用。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤101至步骤106的执行主体可以为设备a;又比如,步骤101和102的执行主体可以为设备a,步骤103-106的执行主体可以为设备b;等等。
图2为本申请又一实施例提供的由unity到ios的封装装置的结构示意图。如图2所示,装置包括:unity创建单元21、导出单元22、ios创建单元31、复制单元32、修改单元33和ios编译单元34。
unity创建单元21,用于在支持unity的开发环境中,创建一unity工程,所述unity工程提供直播应用的界面功能。
导出单元22,用于以ios为导出平台,从unity创建单元21所创建的unity工程中导出一基础ios工程。
ios创建单元31,用于在支持ios的开发环境中,创建一静态库类型的基础ios工程。
复制单元32,用于将导出单元22所导出的基础ios工程中的库文件和类文件全部复制到所述原生ios工程中。
修改单元33,用于在所述原生ios工程的启动文件中添加对unityappcontroller的引用。
ios编译单元34,用于编译所述原生ios工程,以输出继承所述unity工程全部特性的ios文件。
在一可选实施方式中,复制单元32具体用于:在所述原生ios工程的根目录下,新建库文件夹和类文件夹,并将所述基础ios工程中的库文件和类文件分别复制到所述库文件夹和类文件夹中。或者,复制单元32具体用于:直接将所述基础ios工程中的库文件夹和类文件夹分别复制到所述原生ios工程的根目录下。
在一可选实施方式中,导出单元22具体用于:通过编译设置项,选择所述导出平台为ios;编译所述unity工程,以输出所述基础ios工程。
在一可选实施方式中,修改单元33具体用于:打开所述原生ios工程的启动文件的编辑界面;通过所述编辑界面,添加对unityappcontroller的引用。
在一可选实施方式中,unity工程为实现直播应用的界面功能的工程。所述的封装装置还包括:应用开发单元,用于创建ios文件与直播应用的底层业务逻辑之间的调用关系,以及根据ios文件和调用关系,开发直播应用。
本实施例提供的由unity到ios的封装装置,可执行上述方法实施例的流程,其工作流程在此不再赘述。
本实施例提供的由unity到ios的封装装置,基于unity开发用于提供直播应用的界面功能的unity工程,将该工程导出为基础ios工程,在支持ios的开发环境中,创建一静态库类型的原生ios工程,通过将基础ios工程中的库文件和类文件全部复制到原生ios工程中,并在原生ios工程的启动文件中添加对unityappcontroller的引用,然后编译原生ios工程,以获得继承unity工程全部特性的ios文件,从而将unity工程封装成ios模块,为unity与ios的结合应用提供了条件,以便于在基于ios的直播应用中融合unity,丰富直播应用的ui。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。