Unity 调用Android中的java代码

来源:互联网 发布:淘宝手机详情搭配套餐 编辑:程序博客网 时间:2024/04/30 04:33

文章目录
  1. 1. Android 程序
  2. 2. Unity程序
  3. 3. 最佳实践

Unity与Android交互有多种方式,使用AndroidJavaClass和AndroidJavaObject是最为方便的方式,这里只介绍此种方式

Android 程序

  • 按照正常流程创建一个Android工程。
  • 在unity的安装路径Editor\Data\PlaybackEngines\androidplayer\bin 下找到classes.jar(windows)
  • 将Unity的classes.jar 拷贝到Android工程下libs文件夹下,并引入工程里(右键 >Build path > Add to Build path )
  • 开始编写java代码:
    • 首先要写一个类继承UnityPlayerActivity
    • 然后按照正常java格式编写需要Unity调用的方法
    • 可以是静态方法也可以是普通方法只是在Unity中的调用方式不同
  • 生成jar文件
    • 编译需要Unity调用的工程 project > Build All
    • 导出jar文件,选中src和gen文件夹,右键 > Export > JAR file > next > finish

Unity程序

  • 正常创建Unity工程
  • 在Unity目录里创建如下Plugins目录结构,并将建立好的jar文件导入到unity中,如使用到android中的资源文件,要把相关资源文件也拷贝的对应的目录下。(manifest文件一定要拷贝过来。)
  • 创建AndroidJavaClass和AndroidJavaObject类的实例,例如

    1
    2
    3
    4
    5
    6
    7
    8
    public static AndroidJavaClass mBluetooth;
    public static AndroidJavaObject mContext;
    mBluetooth = new AndroidJavaClass("com.wangwang.test.mActivity");
    using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
    mContext = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); //获取Android工程中继承UnityPlayer的类的实例
    }
  • AndroidJavaClass可以用来调用静态方法,AndroidJavaObject可以用来调用非静态方法,例如:

1
2
3
//调用获取到的实例中的方法。java中返回的参数类型用泛型来表示,第一个参数为java中对应的方法名,后面的参数为要传入该java方法的参数。
mContext.Call<bool>("changeServiceState","test");
mBluetooth.CallStatic<bool>("showToast",str , time); //调用类中的静态方法

最佳实践

  • 使用using方法可以减少一些不必要的内内存开销,如:

    1
    2
    3
    4
    5
    //cls_UnityPlayer 在使用后会被销毁
    using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
    mContext = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    }
  • java中继承UnityPlayer的类中需要Content的地方最好都使用UnityPlayer.currentActivity,不然可能会出现莫名其妙的错误

  • Unity中的android相关的配置 Bundle Identifier* 可能需要该为java中项目对应的包名。

参考网站

  • Unity官方相关文档
  • 雨松MOMO的博客
0 0
原创粉丝点击