Android Studio与Unity3D实现交互通信开发

本文介绍如何在Unity3D与Android Studio之间实现交互通信,通过创建aar包,简化Java和C#的调用过程。详细阐述了在Android Studio中创建接口和回调方法,以及在Unity中导入aar包并编写对应脚本进行交互的操作步骤。
摘要由CSDN通过智能技术生成

概述

Unity开发过程中,需要用到某些java库或者java接口实现比较方便,这时候就需要用到unity3D与AndroidStudio交互开发,由AndroidStudio生成集成的包,导入到unity3D后使用.

但是之前一直没搞清楚,如何实现java和c#的通信和调用,很多旧的方法都是导入jar包,导入mainfest.xml等,导了一大堆东西出来,调用的时候还特麻烦,最近参考其他大佬的方案,深入研究了一下,整理出来一个接口调用简单,只需要导出aar包的方法,大部分方法和接口都已经封装好了,最大程度上去除了Android和unity开发的耦合性.

先贴上源码地址: Android及unity源码

大致执行逻辑:

  1. Android中提供Java方法调用接口;
  2. Unity调用Java接口方法;
  3. Java执行具体逻辑;
  4. Java回调Unity方法,返回计算结果。

Android Studio部分

作用:

  • 实现Java逻辑;
  • 提供供Unity调用的方法接口;
  • 回调Unity方法(主要是将Java运算结果返回到Unity中)

此方法只需生成aar包即可.

  1. 新建Android Studio工程,工程名字随意命名,因为后续用不到它.比如叫做AndroidvsUnity.
    软件版本应该无所谓,我用的3.2.
    在这里插入图片描述
  2. SDK版本尽量选择unity开发过程中需要的版本,没有要求的话,我这里选的6.0;
    在这里插入图片描述
  3. 因为是创建arr包,app中不需要管,所以开始不需要像应用开发那样创建Activity,选择no Activity即可,后面的类和Activity在新创建的模块中实现;
    在这里插入图片描述
  4. 点击finish后,工程就创建完成了;
  5. 接下来,创建一个新的Moudle,这里需要稍微注意一下,我们这里创建的是arr包,不是apk应用,所以这里应该选择"Android Library";
    在这里插入图片描述
  6. 这里的moudle的名字是导入unity的aar包,所以要认真取个名字;
    在这里插入图片描述
  7. 接下来,创建几个通信类,可以参照我这里的名字,也可以任意取别的类名.
    在这里插入图片描述

下面是几个类的源码,具体功能在注释中已经写的很清楚了.

AndroidCallBack: 供unity调用Android方法
IUnityCallBack: 供Android调用unity方法
UnityCallBackSingleton: Android调用unity方法的辅助类.

1. AndroidCallBack.java

/**
 * Android方法,在与Unity通信开发过程中,供Unity调用.
 * 用于unity调用java方法的初始化啊,参数传递啊之类的操作.
 */
public class AndroidCallBack {
   
    private static final String TAG = "AndroidCallBack";

    /**
     * Unity中调用方法.
     * 应在unity中的onstart()方法中,调用此方法,设置callback.
     * @param callback unity中实现IUnityCallBack接口的类的对象,其中实现了IUnityCallBack接口声明的各个方法,供Android调用.
     */
    public void setAndroidUnityCallback(IUnityCallBack callback){
   
        try {
   
            UnityCallBackSingleton.getInstance().setUnityCallback(callback);
        }
        catch (Exception ex)
        {
   
            Log.v(TAG,ex.toString());
        }
    }

    /**
     * Android方法,供unity调用,获得unity传入多个参数,执行相关动作.
     * @param param 传入string参数.
     * @param array 传入int[]参数
     */
    public void androidFunc(String str, int[] array){
   

        Log.d(TAG, "androidFunc: get a string from unity: " + str);
        Log.d(TAG, "androidFunc: get a array from unity: " + Arrays.toString(array));


        //Android主动调用unity中的方法.
        IUnityCallBack callBack = UnityCallBackSingleton.getInstance().getUnityCallback();
        if(callBack != null){
   
            String unityStr = callBack.getUnityStringFunc();                                        //调用unity方法,获取返回值.
            Log.d(TAG, "androidFunc: call the unity function and get the result: " + unityStr);
            callBack.setUnityValueFunc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值