由于Android里的一些操作无法直接在unity里面直接实现
所以需要Android和unity相互调用配和去实现一些功能
协作的方式可分为两种形式
- 由unity打包出一个工程在Android studio里面加以补充完善,最后在Android studio打包成apk
- 由Android提供插件给unity使用,在unity中通过调用插件实现相关功能,最后在unity打包成apk
我们主要谈谈第二种方式
- 导出Jar包+扩展MainActivity+Java主导(官方不推荐)
1、在Android studio新建一个工程
2、在工程中新建一个Android Library模块
3、在该模块中新建一个空Activity,删掉该Activity的布局文件
4、将unity中的该目录下的classes.jar文件粘贴到Android studio中新增模块的libs下面
2018.3.14f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
接下来添加这个库
5、修改新增模块的Mainifest.xml中的部分
(可直接复制app中的Mainifest.xml,删除报错的地方)
加上
6、在新增模块的MainActivity中写入想要新增的方法
注意:要修改继承的类
7、build刚才新增的模块
8、build完成后找到
AndroidStudioProjects\TestApplication\testlibrary\build\intermediates\packaged-classes\debug\libs
该目录下的classes.jar并删掉该文件
并将AndroidStudioProjects\TestApplication\testlibrary\build\intermediates\packaged-classes\debug目录下的classes.jar文件放入libs中
将该libs文件夹和新模块中的AndroidManifest.xml文件(可以根据需要修改包名)以及res文件夹拷贝到桌面备用
9、在unity中将发布时的包名修改成AndroidManifest.xml文件中的包名
在unity中新建Plugins/Android文件夹
将上面保存到桌面的文件拷贝到新建的文件夹中
10、新建一个脚本,在脚本中调用之前写的方法
void Start()
{
//获取位于com.unity3d.player包下的UnityPlayerActivity类
AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayerActivity");
//获得ajc所代表的类下的currentActivity对象 也就是之前编辑的那个MainActivity对象
AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
int nTest = ajo.Call<int>("add",1,2);
}
这是在unity中调用Android里的方法,那么怎么在Android中调用unity中的方法呢
-
导出Ara包+扩展MainActivity+Java主导
1、该方法需要拷贝出的文件与1方法不同
将output文件夹下的aar文件拷贝到桌面
将AndroidManifest.xml文件拷贝到桌面
2、修改AndroidManifest.xml中的包名
3、修改aar压缩包
删除libs中的classes.jar
将外层的classes,jar放到libs中
删除压缩包中的AndroidManifest.xml文件中控制label和icon的行
4、将上面的文件拷贝到Plugins/Android文件夹下 -
提供额外的类+Java主导
创建新的模块后不需要新建一个Activity,只需新建一个Class
在Class中写入相关方法
build成功后将classes.jar文件拷贝到unity中就可以了
如果相关方法是非静态
在unity中如此调用
AndroidJavaObject jo = new AndroidJavaObject("com.example.testlibrary.Test");
int nTest = jo.Call<int>("add", 1, 2);
如果相关方法是静态的
在unity中如此调用
AndroidJavaClass jc = new AndroidJavaClass("com.example.testlibrary.Test");
int nTest = jc.CallStatic<int>("add", 1, 2);
- C#主导
不导入任何东西,直接通过unity关联的SDK来调用SDK中包含的方法
如图所示,没有导入任何资源,直接使用SDK中包含的方法输出LogCat
注意:你要搞清楚你想调用的方法在哪个包里面等信息
总结:
来源:CSDN
作者:FrogJJJJJ
链接:https://blog.csdn.net/dj15870669579/article/details/104195725