在Android Studio创建项目
创建一个新项目
点击下一步,Phone and Tablet选择API16,因为Unity最低支持API16
下一步后,选择Empty Activity
下一步,默认即可
下一步,再点击完成,创建项目完成。
在该项目创建新的模块
1、点击文件——>New——>New Module
2、点击Android Library,点击下一步
3、填写Library name(名字可以自己填),Minimum SDK选择API16
4、为刚刚创建的库新建一个Activity
5、我们想要扩展Unity的MainActivity,因此需要删掉在Android Studio创建的这个Activity里的布局xml(Activity_main.xml),防止跟Unity的冲突
再在MainActivity.java里删掉代码:setContentView(R.layout.activity_main);
导入Unity支持包
1、找到Unity的安装目录,找到Unity的classes.jar包,以我电脑的路径为例:C:\Program Files\Unity\Unity2018_3_4f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
2、复制classes.jar,到Android Studio里,切换到Project,找到刚刚创建的那个新的模块unitylibrary,把classes.jar复制到libs下
3、鼠标右键选中添加进去的classes.jar,选中Add As Library
弹出窗口后,选择我们新建的模块unitylibrary,按确定
修改AndroidManifest
1、AndroidManifest简介
AndroidManifest官方解释是应用清单(manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须一模一样。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。
2、如何修改AndroidManifest?
我们可以参考app里的AndroidManifest,打开app里的AndroidManifest,把application的那一段全部复制过来
粘贴替换到unitylibrary的AndroidManifest的application里
然后把报红的都删掉
3、修改app_name,应用安装时显示的名字
4、标志这个Activity的类型是Unity用的,在后加上下面这一句话:
开始在MainActivity.java写方法
1、修改MainActivity继承UnityPlayerActivity,把AppCompatActivity改为UnityPlayerActivity
2、现在可以在MainActivity.java写给Unity的方法,以给Unity提供一个简单的加法方法为例:
3、选中unitylibrary,点击Build——>Make Module ‘unitylibrary’,编译模块
4、把Unity需要的东西复制出来
选中unitylibrary,鼠标右键,show in Explorer
弹出文件夹后打开unitylibrary/build/intermediates/packaged-classes/debug
把文件夹的classes.jar拖到文件夹libs里,替换libs文件夹的classes.jar(libs文件夹的classes.jar是我们在Unity复制出来的,最终编译出来的是外面的这个),替换完成后,把libs复制到其他文件夹(我在桌面上创建了一个文件夹UnityAndroidTestJar)保存这些文件,以便Unity使用。
返回到intermediates文件夹,打开packaged_res/debug,在文件夹UnityAndroidTestJar里创建一个res文件夹,把packaged_res/debug里的values文件夹复制到新建的res文件夹里面。
返回到intermediates文件夹,打开merged_manifests/debug/processDebugManifest/merged,把AndroidManifest.xml复制到文件夹UnityAndroidTestJar里
现在文件夹已经包含了两个文件夹和一个xml文件了,我们需要对xml文件进行修改就可以在Unity使用了
打开AndroidManifest.xml,把package="com.unityandroidtest.lst.unitylibrary"的包名改为Unity使用的包名。
Unity调用Android
1、把Android Studio导出的两个文件夹和xml文件拖给Unity的工程里
在Unity工程里创建一个plugins文件夹,该文件夹下再创建一个Android子文件夹,再把Android Studio导出的两个文件夹和xml文件拖到Android子文件夹里
2、在Unity创建一个脚本使用该jar包
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
//获得位于com.unity3d.player包下的UnityPlayer类
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//获得jc所代表的类下的currentActivity对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
//由于是扩展Unity的MainActivity,Unity的MainActivity是在包名为com.unity3d.player的UnityPlayer类里的
//所以上面两句都是固定的写法
//调用Android Studio导出的方法
//jo.Call<返回值类型>("方法名",传入值1,传入值2......);
int jarReturn = jo.Call<int>("add",1,5);
}
}
Android调用Unity
对于扩展Unity的MainActivity,想要在Android Studio里调用Unity的方法可以使用:
UnityPlayer.UnitySendMessage(“string”,“string”, ***);
我们至少需要传入两个参数,第一个参数为unity中的一个gameobject名称,第二个参数为这个gameobject身上捆绑的脚本中的一个方法,而第三参数事实上是这个对应方法上的参数。