摘自CSDN作者,网址:http://blog.csdn.net/u010377179/article/details/53105062#comments(如有侵权,联系删除。谢谢!)

现在网上的Unity与Android通信的教程,要么是Unity版本不是较新的,要么使用的是Eclipse配置Android。写这篇博文主要是简单说明一下Unity5.3.6和Android Studio2.4的配置,来完成Unity脚本(C#)与Android脚本(Java)的交互通信。

本篇主要讲解搭建Unity与Android交互通信的环境,以及如何在Unity脚本中调用Android工程中的方法。

假设你已经了解了Android Studio创建工程的操作,并且配置好了Android Studio的环境和Unity导出apk的环境,我使用的是Android Studio 2.4版本和Unity5.3.6版本,算是当前最新的版本了。

1、首先将Unity创建一个Android工程,例如我的工程名是:01_Unity_Message,如下是Project视图下的目录。

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第1张图片

2、新建库模块——Android工程是由模块组成的,每一个模块可以创建一个应用,切换到Android视图下可以看到每一个模块。因为Unity与Android通信主要是调用了各自的方法,因此在Android工程中我们可以单独新建一个模块作为库模块,来负责与Unity的交互内容。

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第2张图片


新建模块操作:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第3张图片

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第4张图片

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第5张图片

点击Finish按钮,然后稍等片刻,就会创建出新的模块,我们作为一个库模块来使用,如下图:【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第6张图片

       

3、将Unity的jar包(class.jar)导入到新建的库模块中,首先说明:

首先找到class.jar文件,它的路径在Unity的安装路径下,例如我的是在:

D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes,

然后会发现只有一个classes.jar文件。

这里注意两点:

(1)、这个路径是新版的Unity下的路径,以前版本的jar文件是在

\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Release\下;

(2)、Unity路径下有两个classes.jar文件的不同路径,一个是在

Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes下。

将jar包导入库模块的操作如下:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第7张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第8张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第9张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第10张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第11张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第12张图片 4、因为新建的库模块中没有MainActivity.java,我们可以理解为启动这个模块的java类, 例如在初始的app模块中就有一个MainActivity.java。因此需要新建一个MainActivity.java的文件, 并且调用Unity包中的基类,具体操作如下: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第13张图片 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第14张图片 点击Finish后,会在库模块的中创建出一个MainActivity的类,如下图: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第15张图片

注意:生成MainActivity类后,会在res/layout下生成一个xml文件:main_layout.xml。这个文件是一个布局文件,

因为我们的库模块是为了跟Unity交互的,不需要界面布局,所以为了防止后面发生错误,这里删除掉这个文件:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第16张图片 注意:要修改AndroidMainfest.xml文件,如下: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第17张图片 然后仿照初始的app模块中的AndroidMainfest.xml文件,将里面的部分复制到库模块的AndroidMainfest.xml的相同位置。如下: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第18张图片 然后需要修改一下MainActivity这个脚本,操作如下: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第19张图片 5、下面就是在Android中编写Unity要调用的方法了,例如我这里只写一个简单的两数求和的方法: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第20张图片 6、Build库模块,然后将生成的配置文件导入到Unity工程中,操作如下: 【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第21张图片

然后稍等片刻,编译中....

然后在Project视图下,找到编译生成文件的所在目录unity_exchange/build/intermediates/bundles/debug,

右键后打开所在文件夹

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第22张图片

然后把debug文件夹下的classes.jar文件移动到libs文件夹中,并且把libs文件夹中的classes.jar文件替换掉。 然后将debug文件夹下的libs文件夹、res文件夹、AndroidManifest.xml文件导入到Unity的Assets/Plugins/Android文件夹下 (没有这个文件夹需先创建)。

    
    
注:奇怪的是,debug文件夹下找不到AndroidManifest.xml,什么鬼??经本人亲自摸索测试,发现AS新版本
在该文件夹下找不到文件AndroidManifest.xml,而AndroidManifest.xml存在于如下图所示文件下,OK,解决。
【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第23张图片
    
然后将三个文件移动到Unity的plugins/Android文件夹下。

         

7、创建Unity的C#脚本,并挂载到MainCanera上。为了在真机测试时能够看到求和的结果,

这里我使用的是UGUI的Text来显示结果,同时通过Button的按钮来触发求和方法。如下图。

以下是主要的脚本代码。调用Android中的方法,并将求和结果显示在(Text)界面上。

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第24张图片
    
将脚本挂载到MainCamera上
         

8、Unity编辑器不能运行与Android相关的操作,所以需要导出apk文件到真机上测试。

注意:导出前要修改PlayerSettings相关配置。因为从Android工程中导入了一个AndroidManifest文件,

这个文件中有Android工程的相关配置,例如工程名称、工程的包名、最低SDK版本、执行的Activity等等。

因此我们要在Unity导出apk前修改一些相关配置,主要修改的是包名,如下图:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第25张图片
    
    
    

最后是导出apk包到手机上或虚拟机上测试即可。我的测试截图如下:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第26张图片

特别提醒:如果使用Android工程中初始的app模块来与Unity交互,需要修改部分配置。build.gradle文件中,

将applicationId删除,然后将apply plugin后面的内容修改为"com.android.library"。如下图:

【Unity3d】Unity5与Android交互通信(使用Android Studio2.4)_第27张图片

不建议大家使用初始的app模块,而是新建一个专门作为交互的Library模块。



更多相关文章

  1. Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (二)Java
  2. 【Android开发学习06】Android中的文件I/O操作
  3. Android 基于TCP/IP的Socket通信
  4. 关于xml文件中的一些常用标签的意义
  5. android根据姓名首字母字符顺序读取通信录
  6. Android中资源文件夹res/raw和assets的使用
  7. [Android Studio / NDK] 如何使用javah生成.h文件
  8. Android 打开本地文件兼容7.0

随机推荐

  1. Android(安卓)Studio设置 标题栏隐藏, 状
  2. Android开发工具
  3. Instrumentation 框架简介
  4. IPC(Inter-Process Communication, 进程
  5. Android_TextView属性XML详解
  6. [androidUI]一些布局
  7. Linux开发环境搭建 三 (在Ubuntu上Androi
  8. Android各类属性记录详解,如Edittext
  9. 如何在Android中用好多线程
  10. android api code学习--第一个比较完整的