Unity 嵌入到 原生安卓

最近需要在安卓程序中嵌入Unity 3D作为Motion Capture的原型展示。中文搜索到的教程要么太老,要么有问题,甚至是误导。在中英文引擎并用之后,成功实现了嵌入,所以写一篇实践成功的记录,希望对大家有用吧。

 

1、开发环境

Unity:2019.2.17f1(通过Unity Hub 安装 安卓插件,实现安卓项目编译)

Android Studio:3.6.1

Android API:28(安卓9.0)

NDK:安卓编译需要,如果没有安装,AS会自动安装需要的版本

 

2、Unity3d 部分的操作

我加载了一个简单的人物模型,如下:

Unity 嵌入到 原生安卓_第1张图片

2.1 配置输出参数(选择 Momo)

在File->Building Setting 中进行设置,如下图

Unity 嵌入到 原生安卓_第2张图片

打开 Player Settings

Unity 嵌入到 原生安卓_第3张图片

主要注意三个地方:1、设置一些基本信息;2、设置包名和API级别,都和安卓程序一致就行;3、设置为Momo,然后CPU构架选 ARMv7 和 x86。

2.2 尝试Unity本地运行APP(可选,仅仅作为验证可行用)

Unity 嵌入到 原生安卓_第4张图片

如上设置,选择 Build and Run,保存APK,Unity会生成包,并且在连接的调试手机上运行,效果如下:

Unity 嵌入到 原生安卓_第5张图片

Unity 成功运行了安卓程序。

2.3 Unity导出安卓所需资源

Unity 嵌入到 原生安卓_第6张图片

如上,勾选两个选项,进行输出,得到目录如下:

Unity 嵌入到 原生安卓_第7张图片

接下来我们用其中的一些资源,既可以集成到安卓中去。

3.集成到安卓中去

3.1 简单编译一个安卓程序

略过~~~

3.2 Unity的资源加入

3.2.1 unity-classes的加入

Unity 嵌入到 原生安卓_第8张图片

在资源的libs目录下,将unity-classes复制到安卓目录下的app-libs下面,如下图

Unity 嵌入到 原生安卓_第9张图片

然后,选中,右键,add as library,编译,通过。

3.2.2 assets和jniLibs文件夹的加入

Unity 嵌入到 原生安卓_第10张图片

Unity资源的目录下面,src,main下面两个文件夹:assets和jinLibs直接复制到安卓目录的app.src.main目录下面,如下图

Unity 嵌入到 原生安卓_第11张图片

3.2.3 UnityPlayerActivity 复制到 安卓里面

把UnityPlayerActivity 复制到 MainActivity同一级目录里面,如下图:

Unity 嵌入到 原生安卓_第12张图片

3.3 build和run

到此处,我们的资源合并工作已经完成了,Android Studio中已经有了所需资源。项目编译也没有问题。

3.3.1 更改启动页面

直接将UnityPlayerActivity当初启动页面,在AndroidManifest.xml中更改

Unity 嵌入到 原生安卓_第13张图片

改成UnityPlayerActivity,直接启动Unity

3.3.2 环境配置

这一步基本上所有中文教程都没写,基本上到上面为止,这时我们可以编译通过,也可以在手机上run,但是会直接闪退。提示:

Unity: Failed to load 'libmain.so', the application will terminate。

在stack  overflow 上找到了相关的问题,需要做两步配置

a.在 string.xml中加入 :  

Game view

如下:

Unity 嵌入到 原生安卓_第14张图片

b. 在build.gradle中加入

defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'x86'
        }
    }

如下,定义了ndk的构架:

Unity 嵌入到 原生安卓_第15张图片

 

4.完成集成

至此,我们完成了Unity的安卓集成,编译 run,效果如下:

Unity 嵌入到 原生安卓_第16张图片

Unity嵌入了安卓,接下来可以做更多的操作了~~~

你可能感兴趣的:(安卓,Unity,IMU)