Unity集成华为游戏服务SDK方式(四):Unity集成Android插件
原理介绍
该集成思路是android studio集成sdk后改为library导出,作为插件给unity使用,unity通过gradle配置集成sdk。即通过android插件 实现sdk接口的调用,但是实际sdk集成在unity实现。
Unity端
首先,unity处理场景Scene,我这里创建布局如下:
创建c#脚本文件,并编写点击事件,以初始化为例,代码如下:
定义一个交互对象:
AndroidJavaObject androidSdkObject = null;
在Start中获取对象实例,其中“”中为安卓封装sdk的包名+类名,我这里实现sdk接口调用放在MainActivity中。
void Start() { androidSdkObject = new AndroidJavaObject("com.example.lianyungame.library.MainActivity"); }
点击unity中init按钮,实现调用android 中的sdk初始化方法,需要在脚本文件添加如下方法,包含调用init接口方法和接收sdk初始化结果方法:
public void initial() { //调用android接口 Debug.Log("initial"); androidSdkObject.Call("init"); }
脚本中处理初始化回调方法:
public void initSuccess() { Debug.Log("initSuccess"); } public void initFailed(string str) { Debug.Log("initFailed:" + str); }
脚本文件方法处理完成后将该脚本文件拖到对应的ui上添加组件:
操作后可以看到脚本文件已挂载到画布Canvas上,如图:
到这里unity的代码交互处理完成。
Android端
接下来处理android代码:
Android Studio中新建工程并参考华为官方sdk集成文档集成游戏服务sdk,并处理与unity交互逻辑。因为android java类要继承UnityPlayerActivity类,所以还需要将unity目录下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes\classes.jar拷贝到android项目launcher/libs目录下,并添加对该jar包的依赖。
Android studio集成sdk参考文档:
以实现游戏初始化接口为例,在调用接口后把结果通过UnityPlayer.UnitySendMessage回调给unity。
public void init() { AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME; JosAppsClient appsClient = JosApps.getJosAppsClient(UnityPlayer.currentActivity); Task<Void> initTask; ResourceLoaderUtil.setmContext(UnityPlayer.currentActivity); initTask = appsClient.init( new AppParams(params, new AntiAddictionCallback() { @Override public void onExit() { UnityPlayer.UnitySendMessage("Canvas", "exit", ""); } })); initTask.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Toast.makeText(UnityPlayer.currentActivity, "init success", Toast.LENGTH_LONG).show(); UnityPlayer.UnitySendMessage("Canvas", "initSuccess", ""); } }).addOnFailureListener( new OnFailureListener() { @Override public void onFailure(Exception e) { Toast.makeText(UnityPlayer.currentActivity, "init failed", Toast.LENGTH_LONG).show(); if (e instanceof ApiException) { ApiException apiException = (ApiException) e; int statusCode = apiException.getStatusCode(); Toast.makeText(UnityPlayer.currentActivity, "init failed,statusCode is " + statusCode, Toast.LENGTH_LONG).show(); if (statusCode == JosStatusCodes.JOS_PRIVACY_PROTOCOL_REJECTED) { // 错误码为7401时表示用户未同意华为联运隐私协议 Log.i(TAG, "has reject the protocol"); // 此处您需禁止玩家进入游戏 UnityPlayer.UnitySendMessage("Canvas", "initFailed", "has reject the protocol"); } else if (statusCode == GamesStatusCodes.GAME_STATE_NETWORK_ERROR) { // 错误码7002表示网络异常 Log.i(TAG, "Network error"); // 此处您可提示玩家检查网络,请不要重复调用init接口,否则断网情况下可能会造成手机高耗电。 UnityPlayer.UnitySendMessage("Canvas", "initFailed", "Network error"); } else if (statusCode == 907135003) { // 907135003表示玩家取消HMS Core升级或组件升级 Log.d(TAG, "init statusCode=" + statusCode); init(); } else { // 在此处实现其他错误码的处理 UnityPlayer.UnitySendMessage("Canvas", "initFailed", "other error"); } } } }); }
可以自行编写Ui界面,编译测试接口没问题后将项目改为library导出,提取jar包。
1. 修改application为library
2. 去掉包名
3. 编译后找到编译文件,解压后把根目录下的classes.jar拷贝到unity的Assets>Plugins>Android>libs目录下
回到unity打包
Unity项目中添加sdk集成配置:
1、baseProjectTemplate.gradle 文件中添加AppGallery Connect plugin 以及 Maven repository,如下:
buildscript { repositories {**ARTIFACTORYREPOSITORY** google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } } dependencies { classpath 'com.huawei.agconnect:agcp:1.4.2.300' } repositories {**ARTIFACTORYREPOSITORY** google() jcenter() maven { url 'https://developer.huawei.com/repo/' } flatDir { dirs "${project(':unityLibrary').projectDir}/libs" } }
2、launcherTemplate.gradle和mainTemplate.gradle分别添加构建依赖。
dependencies { implementation project(':unityLibrary') implementation 'com.huawei.hms:game:6.1.0.301' implementation 'com.huawei.hms:hwid:6.4.0.300' implementation 'com.huawei.hms:iap:6.1.0.300' }
3、Json文件需要在manifest文件中配置appid,否则调用接口异常:
<meta-data android:name="com.huawei.hms.client.appid" android:value="appid=xxx"> </meta-data>
然后检查包名与华为后台包名一致,签名编译运行并打包测试。
1、打开unity File>Build Settings...目录:
2、切换到Android平台,点击Play Settings…:
3、左边选中Player,打开Other Settings,勾选Override Default Package Name并重写包名,Minimun API Level选中19(sdk要求最低为19)。
4、选中Player,打开Publishing Settings,设置签名。
5、返回上一个页面,选中场景,点击Build打包即可。其他接口类似,可自行集成并调测。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
爱番番微前端框架落地实践
导读:”微前端”这个词现在对前端同学来说已经比较熟悉了,各种方案也已经落地开花,比较主流如single-spa、乾坤,后来的也有webpack模块联邦。爱番番团队在项目初期后端微服务化的过程中,前端也落地了自己的微前端方案,更好的服务于敏捷开发,提升交付效率。 全文3308字,预计阅读时间10分钟。 一、背景 爱番番团队后端使用微服务架构,实现敏捷开发和部署。为配合微服务架构模式,前端需要对原有的web端单体项目进行拆分,每个微服务对应部分的前端需要有独立的代码库,能够独立开发、测试、部署、上线,实现团队自治;同时在用户感知层面,各个前端模块是一个整体,一个统一的系统,有相同的页面风格和交互风格。 二、初步方案 鉴于以往的项目经验,我们在运行时整合多个前端应用为一个统一的应用时多采用的是iframe的方案,但iframe方案有这些问题: 切换速度慢,影响用户体验 页面内部弹窗不能覆盖整个应用窗口,用户体验差 应用之间通信复杂 以上这些问题极大降低用户体验,是我们不能采用的。我们希望拆分了代码库之后也能保证如下这些体验: 在用户感知上,系统和之前的单体应用一样流畅 保持之前的交互风格 开...
- 下一篇
Go 语言通用代码生成器:仙童尝鲜版九,功能增强,拥有卓绝的变形能力
Go语言通用代码生成器:仙童尝鲜版九,功能增强,拥有卓绝的变形能力 Go语言通用代码生成器:仙童,已公布尝鲜版九已有重大功能增强,新增弹性登录模块 SimpleAuth。实现了基本的登录认证功能。 Go语言通用代码生成器:仙童尝鲜版九拥有卓绝的变形能力。支持三大变形功能群即动态椰子树功能群,动词否定功能群和字段否定功能群。其SimpleAuth弹性登录模块是全自动的弹性登录模块,高度可配置。其三个模块的域对象都可以动态配置。系统自动完成编译检查,并生成符合要求的登录模块。 现在仙童已支持前端和后端复杂版面和图形报表功能。现已支持 Vue 和 ElementUI 的独立前端,一键生成双系统。现在支持 MariaDB,MySQL8,PostgreSQL 和 Oracle 四种数据库。多惊喜等着您去发现。 弹性登录模块SimpleAuth 弹性模块包含了前端和后端功能,实现了基本登录认证功能。密码,角色权限功能都有自动数据增强。一键生成。在今后的几个尝鲜版中,会实现完整的角色和权限功能。 仙童的项目地址:https://gitee.com/jerryshensjf/Fairchild 二进制...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器