栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Unity——与Android(Java)交互

Java 更新时间:发布时间: 百科书网 趣学号
Unity和Android交互 一、前言

Unity做安卓项目时,经常会碰到接安卓sdk的问题,需要获取Android权限,或者调用sdk中写好的Java代码;

1.前期准备:

1)配置java环境;

下载jdk,同时配置环境变量;

2)下载AndroidSDK;

以下查看sdk,jdk,ndk安装是否正常;

3)下载AndroidStudio;

二、安卓打包成Jar/arr 1.操作流程

1.android studio中创Empty项目,项目名和sdk版本设置与Unity一致;

2.修改项目build.gradle中id从application 改为library——同时注释defaultConfig中applicationID(或者重新创建Moudle);

3.导入unity的classes.jar在lib中,右键mark as library;

classes.jar分为Release和Mono版本;

4.src-java-com…中导入UnityPlayerActivity类;并创建新方法类继承UnityPlayerActivity;

5.在新的java类中写需要调用的方法;

6.在gradle中添加

task makeJar(type: Copy) {
    delete 'build/libs/mysdk.jar'
    from('build/intermediates/intermediate-jars/release')   //从该地址复制
    into('build/libs/')                                     //复制到该地址
    include('classes.jar')                                  //包含文件
    rename ('classes.jar', 'mysdk.jar')                     //重命名
}
makeJar.dependsOn(build)

7.在终端Terminal中输入gradlew makejar;

8.在build/intermediates/arr_main_jar/debug中找到classes.jar(打包好的插件)放进unity中使用 ;

2.注意事项

1.终端Terminal失败,可能是没有java环境,先配置java环境(下载jdk);

2.unity高版本之后将classes.jar和UnityplayerActivity.jar分开了,分别在Unity目录中:

​ EditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClasses;

​ EditorDataPlaybackEnginesAndroidPlayerSourcecomunity3dplayer;

3.打包时候的包名和项目名一致;

4.打包完成必须把untiyplayeractivity和classes.jar删除(用压缩文件形式打开),或者添加依赖时使用compileonly;

三、Unity导出Android项目

选择安卓平台,勾选export导出;

四、Unity和Java的互相调用 1.Java调用Unity

UnityPlayer.UnitySendMessage(对象名, 方法名, 参数)API的使用;

对象名:Unity场景中实例的物体名=Hierarchy面板显示的物体名(注意clone);

方法名:该物体上任意脚本中的方法名;

参数:String,只能一个参数,但是String嘛,自己拆分;

2.Unity调用Java

AndroidJavaClass 和 AndroidJavaObject 类的使用;

Unity段只能调用在java中UnityPlayerActivity类的方法;

两种调用方式:

1)静态

using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayerActivity"))
{
    stirng str = jc.CallStatic("ShowStr",str1,str2);    
}

2)非静态

前提在UnityPlayerActivity类中有对应GetInstance方法,如下:

private static UnityPlayerActivity instance;
public static UnityPlayerActivity GetInstance() {
    if (instance == null)
        instance =new UnityPlayerActivity();
    return instance;
}

instance在onCreate中赋值this;

调用端:

using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayerActivity"))
{
    using (AndroidJavaObject jo = jc.CallStatic("GetInstance"))
    {
        stirng str = jo.CallStatic("ShowStr",str1,str2);
    }
}

重要API:

Call调用Android代码中的非静态方法
CallStatic调用Android代码中的静态方法
DisposeIDisposable 回调
Get获取Android代码中的非静态字段
GetRawClass获取一个指向Java class的原始引用
GetRawObject获取一个指向Java object的原始引用
GetStatic获取Android代码中的静态字段
Set设置Android代码中的非静态字段
SetStatic设置Android代码中的静态字段
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/275439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号