搜索一下安卓与unity3d的交互,有比较多的文章,我之前没有接触过unity,安卓也是刚接接触了一点点,一开始看着呢也比较的模糊,陆陆续续的看了几天,有些明白了,整理一下思路。
总结一下各类博文,安卓与unity的交互方式以下有两种,
(unity3d 自己也可以直接将我们在unity3d中设计的场景,导出成apk,可是这样子就缺少了我们在安卓界面熟悉的界面交互,会感觉缺少了点什么,所以还是和Android Studio 交互好一点。)
1. Android Studio 打包自己的activity,导入到 unity3d 中,unity3d中编写脚本,由Android Studio的 Activity启动 unity3d中的场景,unity3d最终将这整个工程编译成一个apk.
这里怎么理解Android Studio与unity3d的交互呢,我自己的一点理解是,unity3d自己有一些事先编写好的包,在unity3d的安装目录下,Android Studio需要先导入这个包,然后在最后那一个需要启动unity3d场景的地方使用这个包里的一些方法(包括一些设置参数等等,我觉得应该有两个方法,一个启动unity场景,另一个从unity返回原来的activity),然后再将这一整个项目生成一个包,导入到unity3d中,在unity3d中根据设置的参数,编写脚本之类的,启动相关的场景以及返回相关的activity. (自己目前比较熟悉Android Studio,所以没有用这种方式)
2. unity3d先制作生成一系列的场景,并导出 Android工程,接着Android Studio 原生的项目导入unity3d生成的Android 工程,在这里存在两种方式:1)导成内部类的形式; 2)导成源码包的形式
先看一下Android Studio Project模式下的目录,一般我们项目自己的资源(activity.class,activity.xml,aar包,jar包,各种图像、音频、数据资源)都在app目录下边,而图中的(xxx)-core ,是我自己从其他的开源项目里导入的源码库(具体操作自行查找),这样,我们就可以在app下的java文件里使用外部库文件了。安卓程序主要是由一个个Activity相互的跳转,组成应用的逻辑,构成了我们看到的一个完整的应用。(安卓中的服务、fragment等自己用的不多, 也是同理的) 所有我们可以直接启动的Activity都在app目录当中。
1)导成内部类的形式
这是 unity3d(2018.4.1f1) 导出的 Android 工程,我一开始直接使用 Android studio 打开这个文件,当然也可以运行,不过这样会把 app下的 build.gradle 和整个项目下的 build.gradle 的各种配置混合在一起看起来特别的混乱,后来仔细看了之后,发现unity3d导出来的这些文件其实就是,正常 Android Studio 生成项目 app 目录下的文件,于是,我重新创建空的工程,然后把 unity3d 导出来的这些文件放在空项目的 app(当然要app里删除原来的文件啦~),接着再把 app 下的 build.gradle 中有些配置(可以参看一个新建的Hello World项目)转移到整个项目的 build.gradle 中,这个时候可能会报错,不过不要紧,看一下错误,好像是跟JVM编译过程的某些方面有关系的,我直接把 app 下的 gradle.properties 中的(还有整个项目中的gradle.properties)
#org.gradle.jvmargs=-Xmx4096M 直接注释掉就可以了
好了现在这个项目就跟正常的项目一样了,gradle 的好多语法我都还不懂,说不明白就不说了。
于是,如果我们原本有一个 Android Studio项目,想把 unity3d项目导到安卓项目中,就需要把上图的libs、src中的文件都一一按照目录要求放到 Android Studio 中的 app当中,https://zhuanlan.zhihu.com/p/30710788 (具体过程参考这里~),其中博主截图少了一张把 src/main/res 中资源文件添加的过程,我原本以这些不重要,就没有添加,所以运行不起来了...
上边链接博主还提醒了我一个点就是,unity3d导出来的项目里有一个主Activity,但是它没有对应的布局文件xml,它启动该活动的时候可以动态加载布局,所以那些src/main/res布局资源文件也是需要的。其实,当我们从unity3d中导出安卓项目时,unity3d就将我们在unity3d设计的场景生成了一个Activity,以及相关的资源文件和包。交互的过程就是,Activity之间的跳转,参数的互传。将unity3d生成的Activity以及资源放到app下也是方便,Activity之间的跳转。博主创建了一个新的Activity来包装unity3d的Activity,方便跳入、跳出这个场景。
https://zhuanlan.zhihu.com/p/30710788 (具体的操作还是参考这里~)
2)导成源码包的形式
如上图,以源码包的形式将unity3d导出的安卓的项目导入Android Studio,这样也可以使用unity3d中的Activity,不过,我尚且不知道怎么包装这个源码中的Activity
PS: 项目还是没有做完,好了再传源码~