关于Unity和android的混合开发以及交互教程,网上有很多。但是大多只是部分教程,对于很多只会android或者只会Unity的人来说就比较尴尬。所以,在学习研究之后写一篇文章来记录自己躺过的坑。
关于Unity和android的混合开发,我一般理解为两种。一种是以Unity为主 android为辅的模式,第二种是以android为主Unity为辅的模式。我个人是第一种,因为对android不太熟悉为了这个交互开发硬生生把android入门了。所以第二种只简单说一下我踩过的坑,有android方面不对的地方请大神轻喷。
开发环境搭建我就不多赘述了,既然你都来看我片文章。说明你至少是会android开发或者Unity开发的。所以,androidSDK+androidStudio的开发环境搭建网上有很多教程。这里我就不写了。Unity也是一样,网上有很多教程。
我的开发环境,Unity2018.2.20 + AndroidStudio3.5.2
1、Unity为主android为辅的模式交互
这种模式主要将android工程打包成aar,放到Unity->Plugins下然后在Unity里面来调用的方法,大部分教程介绍也是这种
新建一个android工程
2、找到你的Unity安装目录下classes.jar文件,具体路径是
你的Unity安装文件夹+Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
如果你的项目采用il2cpp编译,那么路径则是:
你的Unity安装文件夹+Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes\classes.jar
3、找到classes.jar文件后将文件放到你的android工程->app文件夹下的libs文件夹中
4、复制后还需要将 classes.jar包作为库添加到android工程中,在classes.jar上右键,找到Add As Library点击确定
5、如果能看到classes.jar下的文件夹了。就表示你已经添加成功
6、找到你的android工程代码MainActivity.java,打开编辑
7、编辑java脚本需要注意点图片中都已经说明
8、这步完成后,还需要处理几个地方。也可以说是小坑,因为这几个地方没处理好,Unity打包的时候很容易报错或者闪退
找到你的android工程app目录下的build.gradle文件打开编辑
9、编辑需要注意的地方都在图片中标明了
10、编辑Android工程App文件夹下的AndroidManifest.xml文件
11、配置完成AndroidManifest.xml还有一个styles.xml需要改
这里是第二个坑,样式表文件sytles.xml这里面默认内容都要屏蔽。这个android工程只用来调用一些函数或者库来给Unity调用,不是用来打apk的android工程所以不需要这个表。反之如果不删除会导致在Unity打包的时候,因为表里有引用文件,文件找不到会报错导致打不了包
将styles.xml里面的默认内容全部屏蔽或者删除掉
如果屏蔽掉styles.xml文件后,Unity打包还是报错的话。个人建议将res文件夹下的资源全部删除
12、到这里Android工程中的配置和编辑就已经基本完成,开始打aar包。找到androidStuido 右上角的Gradle选项,打开找到工程文件夹注意不是app哈。找到Build或者other文件夹下找到assembleDebug或者assemble都可以。ps:但是第一次打开的时候找不到这些打包脚本怎么办,那就刷新一下Gradle
13、刷新Gradle,刷新完成就有build和other文件夹了。ps:assemble是同时打Release包和Debug包。而other目录下的就是单独打Release和debug的意思。
14、我们选择只打debug包,就选other文件夹下的assembleDebug打包脚本运行,然后打出来包的位置再app->build->outputs->aar
-----------------------------到此为止Android里面的处理就完成了,开始在Unity里面开发---------------------------------
15、将打包出来的aar复制到Unity工程目录下的Plugins->Android下面 ps:没有这个目录就建一个
然后用压缩软件打开aar文件,将里面的AndroidManifest.xml文件解压到aar同级目录下
16、将Unity工程切换为Android模式
17、开始创建一个c#脚本,将脚本挂载到Unity场景上
18、编写c#调用代码,这里说一下Unity调用Android代码有多种方式,我这里暂时说第一种比较常规常用的,后面会写第二种
19、到了这里,我们已经能知道Unity场景节点名字,Unity接收Android函数的名字。可以根据这两个参数重新修改android工程里的MainActivity.java代码
场景节点名字叫GameObj 接收函数的名字是UnityToAndroid
我们重新修改android代码
编辑完成后-->重新压aar包-->通过压缩软件把androidManifest.xml文件拖出来(相当于重新执行13,14,15步的操作)
20、用Unity打apk
设置或者检查Unity里面的包名,要和android工程里面一样。选择最小和最大的android版本
检查或者设置完成,打包