快要过年了,今天是上班的最后一天,下午就要回家啦~
最近项目中的任务完成的差不多了,主程让我们研究一下unity和Android之间的相互调用,于是在网上找了些资料,自己琢磨出来了。
公司使用unity引擎进行开发,所以对于安卓我没有什么经验,算是第一次接触。
下面将做法分享出来,希望能帮助到有需要的人,也作为自己的学习笔记吧。
一、安卓部分 (我用的是AndroidStudio)
(1)在Android试图下打开build.gradle,将 apply plugin:'com.android.application'修改为 apply plugin:'com.android.library'(这样做的目的是将安卓项目到处成unity需要的aar或者jar文件,而不是一个apk)
(2)删除defaultConfig下的applicationId一行,dependencies下删到只剩一行 compile fileTree(include: ['*.jar'],dir:'libs')
(3)将values文件夹下的style.xml删除,同时修改AndroidMenifest.xml中的主题设置 android:theme="@android:style/Theme.NoTitleBar"
(4)android:name=".MainActivity"本来是.Activity名 修改为自己的包名.Activity名,之后的Activity也是这样
(5)下图是我的AndroidMenifest.xml文件
(6)引入unity的classes.jar包。
mac下的路径为Application-unity-PlaybackEngines-AndroidPlayer-Variations-mono-Release-Classes-classes.jar
将这个文件拷贝到项目中的app-libs目录下,然后右键classes.jar选择Add As Library可以将其引入
或者在build.gradle文件中写一行compile files('libs/classes.jar')
(7)接下来写安卓代码
注意MainActivity继承自UnityPlayerActivity
然后在res下新建一个xml文件命名为firstactivity.xml
在src-main-java-自己的包名下新建一个java文件
注意要在AndroidMenifest.xml中配置,上面有图
到这里安卓部分已经大概完成了,解释一下上面的代码
MainActivity.java
继承自UnityPlayer,实现了一个切换到fristactivity的方法JumpToActivity1,这个方法是由unity来调用的,参数也是由unity传递过来
FirstActivity.java
继承自Activity,textView显示unity传递过来的字符串参数,button按下发送消息调用unity的方法,将editText中输入的内容作为参数传递过去
UnityPlayer.UnitySendMessage("Main Camera","GetMsg",editText.getText().toString());参数1是unity脚本挂载的物体,参数2是unity中c#脚本中的实现方法,参数3是Android传递给unity的参数
接下来将安卓项目导出给unity使用
Build Apk 将会在app-build-outputs-aar下生成一个app-debug.aar文件,在文件夹中打开它,将后缀改为.zip,解压,得到以下文件
其中标红框的文件是等会要用到的
二、unity部分
创建一个unity项目,新建Plugins-Android文件夹。将上图红框标记的文件赋值到Android文件夹下,将外面的Classes.jar拖到libs下替换libs下面的classes.jar
(1)在场景中拖上一个文本框Text,一个输入框InputField,一个按钮Button
(2)创建一个C#脚本 MainController.cs
(3)将脚本挂在Main Camera上
(4)给Button添加点击事件,按下按钮调用安卓的方法
(5)打包apk,在真机或者模拟器下运行
其中playerSetting中Bundle Indentifier 设置为自己的安卓包名