Unity与Android Studio的交互实现

Unity和Android交互

一、前言

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

1.前期准备:

1)配置java环境;

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

2)下载AndroidSDK;

Unity和AndroidStudio交互 unity和安卓sdk的交互_jar

Unity和AndroidStudio交互 unity和安卓sdk的交互_unity_02

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

Unity和AndroidStudio交互 unity和安卓sdk的交互_android_03

3)下载AndroidStudio;

二、安卓打包成Jar/arr

1.操作流程

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

Unity和AndroidStudio交互 unity和安卓sdk的交互_Android_04

Unity和AndroidStudio交互 unity和安卓sdk的交互_unity_05

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

Unity和AndroidStudio交互 unity和安卓sdk的交互_java_06

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

classes.jar分为Release和Mono版本;

Unity和AndroidStudio交互 unity和安卓sdk的交互_java_07

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

Unity和AndroidStudio交互 unity和安卓sdk的交互_java_08

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;

Unity和AndroidStudio交互 unity和安卓sdk的交互_Android_09

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

2.注意事项

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

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

Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes;

Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player;

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

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

三、Unity导出Android项目

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

Unity和AndroidStudio交互 unity和安卓sdk的交互_android_10

四、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<string>("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<AndroidJavaObject>("GetInstance"))
    {
        stirng str = jo.CallStatic<string>("ShowStr",str1,str2);
    }
}

重要API:


Call调用Android代码中的非静态方法
CallStatic调用Android代码中的静态方法
DisposeIDisposable 回调
Get获取Android代码中的非静态字段
GetRawClass获取一个指向Java class的原始引用
GetRawObject获取一个指向Java object的原始引用
GetStatic获取Android代码中的静态字段
Set设置Android代码中的非静态字段
SetStatic设置Android代码中的静态字段

               

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空