Unity 高级混合开发

我的前两篇文章讲述的最基本的Android和iOS与Unity交互的基础,据此使用此方法在Unity上进行二次开发,不管是对接三方SDK,还是使用Android原生或者iOS原生高效的UI系统,都是可以实现的,这样既发挥了Unity在3D游戏引擎上的跨平台巨大优势,也可以针对Unity目前UI性能差等进行原生开发,做到取长补短,从而提升产品的表现力,提升留存。目前本公司开发的3D涂色游戏Voxel就使用了目前这种混合开发的思路(Apple Store和Google Play搜索关键字Voxel,下载量最多的就是本家产品),列表面使用了Android和iOS高效美观的原生RecycleView,涂色面使用了Unity的内核进行用户交互,使用Android,iOS难以实现的3D技术,例子特效技术,高清渲染管线技术,提升用户在玩的感受!另外,原生端也实现了一套变现代码,通过Android和iOS端具体实现,Unity只负责上层调用,接收原生回调进行逻辑分发。大大提升了移动平台的高度拓展性!

不过,前两篇文章都是以Java,Object-C源代码的方式进行集成的。这样,像常用的广告变现,IAP服务器验证,通用工具类等项目必备的功能模块,移植性就很差了,需要手动的将代码粘贴复制到新的项目中,进行繁杂的对接任务,根据轻休闲游戏短平快的特征,与短平快背离,虽然效果提升了,但是工具量也上升了。

此时高级两字就体现出意义了,经过本人长达半年在Android iOS端的研究,总结了一下Unity工作流程

1 定义和声明Unity所有需要调用原生的接口,封装为统一的dll文件,将每一功能进行模块化开发

2 Android端和iOS端通过Java和Object-C实现具体的原生功能模块,例如,广告模块,分析模块,归因模块,IAP模块,自推广模块,推送模块等等诸如你能想到的项目复用度高的功能,将所有的原生函数调用接口与Unity保持一致。Android和iOS分别通过Maven和Cocoapods线上依赖形式管理你自己的SDK

3 通过Unity强大的自定义编辑器功能,实现所有原生插件的开关状态和配置信息,在结合Unity Postbuild预处理编译功能修改Unity工程中Android默认的Gradle,AndroidManifest文件,iOS端根据配置信息修改info.plist,project.pbxproj文件,直接生成Podfile文件,通过依赖已经处理好的Android和iOS原生依赖库,直接进行三方集成和编译

 

Unity SDK自定义编辑器示例:

Unity 高级混合开发

 

利:

1:大大优化了Unity的项目结构,不需要导入各种三方SDK的aar文件或者Framework文件,降低Unity开发人员的维护成本

2: Unity开发只需要通过简单的C#代码调用直接实现功能,提升开发效率

3:公有SDK模块复用率及高,不仅能满足Android和iOS原生开发团队的需求,也可以满足Unity和Laya等游戏引擎的需求

4:通过统一的打点分析,对所有产品进行数据指标监测

5:业务与产品直接分离,SDK的低耦特性可以使商务和运营进行快而有效的商业化策略调整。

6:实现多渠道分发,将渠道对接任务重心放在SDK端,而不是产品端

7:统一了公司业务端,降低运营成本

8:满足了不支持Unity等游戏平台的的三方集成需求

9:为日后做游戏发行提供商业化SDK技术基础

10:公司通过后台的支持,将所有公有SDK变现收益进行分析,形成BI系统和中台系统。

 

下面我将结合实际谈谈对本人及公司的切身有益之处

互联网行业瞬息万变,商业化变化频率高,举个实际例子,目前公司主做轻休闲游戏出海,主要靠广告变现进行盈利,而变现的方式众多,目前公司所使用的广告聚合有Mopub,Max,Upltv,Adtiming,Ironsouce等,所合作的Network高达20余家,还有很多并不支持Unity,而通过此方式,对所有广告SDK进行抽象化,抽离共有函数,使用反射实例化对应聚合的方式,快速切换聚合平台,分发众多渠道。在通过SDK的低耦合特性,实现每一个项目实现功能的自定义选装,大大提升了开发效率和降低了维护成本。Unity 高级混合开发的模式已经适用于公司的Android,iOS,Laya,开发团队,只需要少量的开发人员,就可以掌握公司生存之道。以达到对目前市场环境作出迅速的应变能力!

下一篇章将讲述Unity-Android通过Smali功能实现Unity的二次编译和SDK注入,对游戏发行业务提供技术支持