Unity与Java通信

来源:互联网 发布:圆谷官方奥特曼数据 编辑:程序博客网 时间:2024/05/17 10:28

转自:http://www.wxdgame.com/blog/2015/11/08/study2/

因为unity需要接入java的sdk,所以今天主要学习了一下相关的通信方法。需要先做如下准备工作:
  1、下载android SDK安装包,http://pan.baidu.com/s/1dDGM8oD,里面会包含sdk和eclipse两个文件夹;
  2、unity工程从Build Settings界面选择android平台,选中Google Android Projects,导出安卓工程;
  3、打开eclipse导入安卓工程,测试编译通过。

  有两种方法可以让unity跟java进行通信:
  第一种写法,在eclipse中自定义个包名,在里面创建一个类,例如我自定义了com.sdk.SDKAPI:

  打开AndroidManifest.xml文件,在application节点下有若干个activity节点,找到android:name=”com.xxxxx.UnityPlayerNativeActivity”属性,后面字符串显示的是目前java工程中当前正在使用的activity类文件,把他改成我们刚才自定义的com.sdk.SDKAPI,然后在unity中代码如下:

  编译运行通过,点击我们放置的按钮,查看log输出,于是我们得到了两个结论:1、java类中的私有方法也可以被unity调用;2、只能调用静态方法。如果我想调用java非静态方法怎么办呢?于是就有了第二种写法,我们修改下unity的代码:

  同时java里的代码也要进行调整:

  这样java里的两个方法就都可以被调用了,那么差别主要包括哪些呢,总共有四点:
  1、java里面的类需要继承UnityPlayerNativeActivity;
  2、unity里面AndroidJavaClass的参数改为:

  3、从刚才得到的class实例中获取currentActivity:

  4、下面在调用call方法的时候,把之前从AndroidJavaClass实例调用改成从AndroidJavaObject调用。

  此外,关于java调用unity的接口比较简单,直接调用com.unity3d.player.UnityPlayer.UnitySendMessage接口就行了。总共包含三个参数,第一个表示unity中包含c#脚本的GameObject实例名称,第二个表示方法名,第三个表示传递的参数,由于只是个字符串类型,所以如果有多个参数需要传递的话,可以像我这样使用JSONObject传递多个参数。


0 0
原创粉丝点击