美文网首页Android2UnityUnity3D
【Unity3d】Unity5与Android交互通信(使用An

【Unity3d】Unity5与Android交互通信(使用An

作者: 壹米玖坤 | 来源:发表于2017-03-05 16:46 被阅读7489次

    现在网上的Unity与Android通信的教程,要么是Unity版本不是较新的,要么使用的是Eclipse配置Android。写这篇博文主要是简单说明一下Unity5.3.6和Android Studio2.4的配置,来完成Unity脚本(C#)与Android脚本(Java)的交互通信。PS:以下详细操作截图是本人的真实操作,能考虑到的重点已经说明,如果存在其他问题,大家可以指出,共同进步!

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

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

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

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

    新建模块操作:

    点击Finish按钮,然后稍等片刻,就会创建出新的模块,我们作为一个库模块来使用,如下图:

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

    首先找到class.jar文件,它的路径在Unity的安装路径下,例如我的是在:D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes,然后会发现只有一个class.jar文件。

    这里注意两点:

    (1)、这个路径是新版的Unity下的路径,以前版本的jar文件是在\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Release\下;

    (2)、Unity路径下有两个class.jar文件的不同路径,一个是在Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下,另一个是在D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes下。Unity中我们使用的是C#脚本,最终运行在Android上是由于Mono进行转换的,所以我们选用的jar文件是第一个路径下的。如果使用的是il2cpp,就要选择第二个路径下的jar文件。

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

    4、因为新建的库模块中没有MainActivity.java,我们可以理解为启动这个模块的java类,例如在初始的app模块中就有一个MainActivity.java。因此需要新建一个MainActivity.java的文件,并且调用Unity包中的基类,具体操作如下:

    点击Finish后,会在库模块的中创建出一个MainActivity的类,如下图:

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

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

    注意:要修改AndroidMainfest.xml文件,如下:

    然后仿照初始的app模块中的AndroidMainfest.xml文件,将里面的部分复制到库模块的AndroidMainfest.xml的相同位置。如下:

    然后需要修改一下MainActivity这个脚本,操作如下:

    5、下面就是在Android中编写Unity要调用的方法了,例如我这里只写一个简单的两数求和的方法:

    6、Build库模块,然后将生成的配置文件导入到Unity工程中,操作如下:

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

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

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

    然后将三个文件移动到Unity的plugins/Android文件夹下。

    7、创建Unity的C#脚本,并挂载到MainCanera上。为了在真机测试时能够看到求和的结果,这里我使用的是UGUI的Text来显示结果,同时通过Button的按钮来触发求和方法。如下图。

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

    将脚本挂载到MainCamera上

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

    注意:导出前要修改PlayerSettings相关配置。因为从Android工程中导入了一个AndroidManifest文件,这个文件中有Android工程的相关配置,例如工程名称、工程的包名、最低SDK版本、执行的Activity等等。因此我们要在Unity导出apk前修改一些相关配置,主要修改的是包名,如下图:

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

    特别提醒:如果使用Android工程中初始的app模块来与Unity交互,需要修改部分配置。build.gradle文件中,将applicationId删除,然后将apply plugin后面的内容修改为"com.android.library"。如下图:

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

    如有不足,希望大家指正。下篇讲解如何在Android脚本中调用Unity脚本的方法。

    相关文章

      网友评论

      • 2e79f1062024:老师,我最近在做unity打开手机相册剪切图片然后传回unity的功能,图片剪切并且保存到了书记端,但是只要一调用unity里面的方法就闪退,这是为什么呀?可不可以帮我看一下,困扰了很久
      • 香菜小哥哥:老师,Build库模块,然后将生成的配置文件导入到Unity工程中。我按照步骤做,但是生成的文件夹 没有bundles文件夹。请问因为什么。
        2e79f1062024:新版的androidstudio改文件夹了你在interediates/package-class/debug下找class
        tinysilk:我也是
      • 霍莉雪特:老师您好,是不是在XML中漏了加上一行
        <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
      • 霍莉雪特:相见恨晚的好文章!!踩坑踩了好久
      • 0909a7c09250:讲解的非常好 赞一个 小白看得懂系类
      • 15c718193b10:请问如果想在Android原生项目中去使用unity 的东西该怎么做?就是说要把unity导入到Android的项目里
      • 29c88efab822:按教程操作之后,在unity发布apk的时候,总是报错,错误:
        Failed to compile resources with the following parameters:
        -bootclasspath "C:/android-sdk-windows/android-sdk-windows\platforms\android-25\android.jar" -d "C:\Users\Administrator\Documents\2017111801\Temp\StagingArea\bin\classes" -source 1.6 -target 1.6 -encoding UTF-8 "com\aiwi\administrator\unity_exchange\R.java" "com\aiwi\administrator\unity_exchange\resources\R.java"
        ����: C:\android-sdk-windows\android-sdk-windows\platforms\android-25\android.jar(java/lang/Object.class): ���汾 52 �� 51 ��, �˱�����֧�����µ����汾��
        ���������˱�������
        ����: C:\android-sdk-windows\android-sdk-windows\platforms\android-25\android.jar(java/lang/AutoCloseable.class): ���汾 52 �� 51 ��, �˱�����֧�����µ����汾��
        ���������˱�������
        2 ������

        这是怎么回事啊?应该怎么解决呢?
      • yanghui0702:我的app是横屏,我把jar包导入unity后,打包apk。在手机上运行时,只能竖屏显示,旋转手机成横屏,直接闪退。怎么解决?求教,谢谢啦!!
        还有一个问题:我想加图标
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher" //此行报错
        android:label="@string/app_name"
        android:supportsRtl="true">
        报的错误:no documentation found.
        请问怎么处理?
        yanghui0702:图标问题解决了,请教一下第一个问题吧,谢谢啦。
      • 爱喝粥的西瓜:感谢作者,写得如此详细,让我等不熟悉安卓开发的人员可以看懂
      • 想入门的码奴:unity打包,Android调用的文章,您知道哪里有吗
        壹米玖坤:百度很多的
        暗尘随码去:http://blog.csdn.net/crazy1235/article/details/46733221
        暗尘随码去:http://blog.csdn.net/yanchezuo/article/details/52261944
      • 苦逼的Coding:照着上面对着敲的,build settings 报 res 文件夹出错,删除了,在 build settings ,又报 classes 架包的错,删除后,成功的导出 apk 文件,但是不能在模拟器上运行。
      • 浅笑迷离半夏空白_6fd3:如果build中引入了其他第三方的内容,这个怎么放到unity3d中呢,总是提示不存在这个东西
        KIikqjzq:你好 请问一下你找到解决办法了吗 我这边工程里面有很多第三方的jar和资源 像Google facebook 之类在external libraries下的 它们的资源都不在arr包里面
      • lizhao:老师,我怎么没找到你的《如何在Android脚本中调用Unity脚本的方法》的这篇博客啊?
        望回复,谢谢
      • Leovany:终于看到最新的了,我试了雨松大大的办法,可能是2012年写的,一直试不通,看了老师这篇,按着步骤做,终于试成功了,十分感谢老师!!
        香菜小哥哥:请问下,build库模块,生成的文件夹里没有bundles文件夹,你那里有嘛?知道什么原因嘛?非常感谢
      • Amadeus_6396:照着做完后遇到问题了
        点击按钮没变化
        然后输出日志有句话让我很意外

        AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='add' signature='(II)I' in class Lcom.unity3d.player.UnityPlayerActivity;
        java.lang.NoSuchMethodError: no non-static method with name='add' signature='(II)I' in class Lcom.unity3d.player.UnityPlayerActivity;

        怎么会有Lcom 我明明没有写
        该怎么办:joy:
        漂泊的疯:同问,弄了一个上午,试了很多方法,都是这个问题 ,有已经解决过的兄弟么,说下怎么解决的
        北平少猿:在add前面添加static试试。
        832738720ab1:我也遇到这个情况了,兄弟解决没有

      本文标题:【Unity3d】Unity5与Android交互通信(使用An

      本文链接:https://www.haomeiwen.com/subject/ijregttx.html