IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Uniapp/android嵌入Unity3d,实现交互 -> 正文阅读

[移动开发]Uniapp/android嵌入Unity3d,实现交互

因为官方文档写的很多不清楚,所以走了很多弯路,现将实现方法总结分享一下,因为之前接触原生开发较少,不规范地方也请多包容指正。

uniapp应用在android开发的实现的思想是将uniapp作为主程序,分别开发或引入其他原生插件作为module供主程序调用,进而实现功能更加全面。

1.uniapp与android混合开发相关配置

之前文章中有提过,不过多赘述。大概思路是下载和Hbuilder相同版本的Android SDK,在相关模板改成自己程序的配置。

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121920418

首先下载与uniapp版本相对应的供安卓调用的App离线SDK,版本不一致将会出现无法兼容的问题。然后在安卓开发工具Android Studio中打开已经下载好的Android离线打包SDK中的UniPlugin-Hello-AS安卓项目,因为该项目已经作为安卓调用uniapp的示例将相应配置、依赖包引用等设置完毕,因此可以直接在示例基础上改成自己程序的配置即可。导入成功之后会自动下载相应依赖包。最后根据项目情况进行相应设置:

(1)将打包好的uniapp项目替换掉app\src\main\assets\apps\assets路径下的示例项目。

(2)打开安卓项目assets文件下的data目录中dcloud_control.xml文件 ,将uni-app项目的文件夹名字粘入appid。

(3)申请Appkey,在开发者中心,点击刚才创建的app,进行安卓包名和安卓证书签名设置,并将生成后的key值替换到AndroidManifest.xml(app)中meta-data节点的value中。

?

(4)将安卓包名替换到build.gradle(app)中defaultConfig下applicationId 中包名、AndroidManifest.xml(app)中的mainfest节点下的package及provider节点下的authorities。

? ? ? ? ? ? ? ? ? ? ??

?

?

(5)对build.gradle(app)的signingConfigs 节点根据安卓证书的实际情况进行设置。

(6)并将安卓许可证书(***.keystore)放到app根目录下。

(7)AndroidManifest.xml(app)文件中 application节点下修改App名字和图标

?

2.Unity3d 打包成安卓版本

在Build Setting界面点击Player Settings,面板中查找Identification,设置好英文包名(中文会报错),scripting Backend 选择L2CPP模式并选中ARM64

以确保能与android程序匹配,具体如下图所示。

Unity3d的Android二次开发包导出后,目录结构如下图所示:

此后需要按照导出为含有源代码的Android项目工程方式将其导入android studio中,之后需要开展如下几个步骤的模块配置:

按照Unity3d官方例子,在安卓项目同级创建文件夹UnityProject->androidBuild

将Unity3d导出的项目拷入androidBuild文件夹下。

安卓中嵌入该Unity3d项目,作为一个module进行调用

1)setting.gradle?文件添加 unityLibrary module

include ':unityLibrary'

project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary')

2)选择?build.gradle(:app)添加 dependencies

dependencies {

????implementation project(':unityLibrary')

implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

// 自己项目的配置

}

3)选择 build.gradle(:UniPlugin-Hello-AS)

allprojects {

????repositories {

????????google()

????????jcenter()

????????// Add Code

????????flatDir {

????????????dirs "${project(':unityLibrary').projectDir}/libs"

????????}

????????// End

????}

}

4)选择 NativeAndroidApp 的?strings.xml?添加,点击 AS 的 sync project,可以看到已经多了一个 module。

<resources>

????<string name="app_name">NativeAndroidApp</string>

????<string name="action_settings">Settings</string>

????// Add Code

????<string name="game_view_content_description">Game view</string>

????// End

</resources>

?

5)在主运行程序的app下的main->assets->dcloud_uniplugin.json添加依赖,其中name为插件名。

"plugins": [

? ?{

?? ??"type": "module",

?? ??"name": "Unity",

? ???"class": "com.unity3d.player.UnityPlayerActivity"

??}

1)将AndroidManifest.xml(:unityLibrary)中intent-filter节点注释掉。

?

2).将除了unity-classes.jar包以外的包拷入app下的lib中,用于项目的引用包。

(3)将build.gradle(unityLibrary)中相关包引用注释掉。

3.uniapp-Unity3d应用在android中的交互

通过uni-app中点击按钮事件对Unity3d界面进行调用,另一方面Unity3d中设置返回按钮,进行Unity3d界面退出,返回安卓界面,最终实现uniapp-Unity3d在安卓中的交互。具体实现方法如下:

(1)uni-app对Unity3d的调用:

goActivity(){

????????????????var main = plus.android.runtimeMainActivity();

????????????????var Intent = plus.android.importClass("android.content.Intent");

????????????????var intent = new Intent(main.getIntent());

????????????????intent.setClassName(main, "com.unity3d.player.UnityPlayerActivity");

????????????????intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

????????????????main.startActivity(intent);

????????????},

(2)Unity3d中返回按钮调用安卓端的实现

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

?AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

?jo.Call("onBackPressed");

(3)安卓端对Unity3d信息的接收,退出Unity3d,返回安卓界面。

@Override

????public void onBackPressed() {

????????runOnUiThread(new Runnable() {

????????????@Override

????????????public void run() {

????????????????mUnityPlayer.quit();

????????????}

????????});

????????super.onBackPressed();

????}

?

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:32:50  更:2022-03-16 22:32:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 18:52:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码