Android与Unity的交互

Posted xiaoqiang_0719

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android与Unity的交互相关的知识,希望对你有一定的参考价值。

android与Unity的交互方式

  1. Unity做好功能之后提供classes.jar文件,导入到Android Studio中进行之后的功能开发。最后由Android Studio打包APK。

  2. Android Sutido做好项目导出jar或aar包,导入到Unity中作为Unity的插件使用,最后由Unity打包APK

    Android开发主要采用第一种方式,由Android方来打包apk

使用方法

简单来说,跟Android与js交互很像,都是定义好相同名字的方法互相调用

  • 约定好相互调用的方法之后,由Unity编写代码,并导为出Android Library

  • 这个Library中会包含所需的so库,assets,最主要的是lib下的class.jar,与Android交互主要就是使用这个类中的方法

  • Android方面直接引用这个Library库即可

  • Android调用Unity,拿到类UnityPlayer(Library库中自动生成的方法位于class.jar中),调用约定要好的方法

mUnityPlayer.UnitySendMessage("Manager", "Manager", str); 

三个参数依次是 Unity中交互脚本所挂的对象、需要调用的方法、方法里需要传递的参数
 

Unity调用Android,约定好调用那个类中的什么方法,以及方法的参数,是否有返回值等

如下示例,就是调用com.unity3d.player.UnityPlayer类中的ShowRedPacket方法(无参数,无返回值)

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ShowRedPacket"); 

Android中定义相应的方法,执行操作:

    public void ShowRedPacket() 
        Log.e(TAG,"ShowRedPacket所在线程:"+Thread.currentThread().getName());
        //这里的线程是Unity main线程,需要转换到android的主线程中操作自己的业务逻辑
        runOnUiThread(new Runnable() 
            @Override
            public void run() 
                showMyDialog();
            
        );
    

注:

  • AndroidJavaClass 代表一个Java类, 例如 com.nobo.unity包下有个Util类 有一个静态方法 checkPermission()

    可以这样调用new AndroidJavaClass(“com.nobo.unity.Util”).callstatic(“checkPermission”);就相当于Util.checkPermission()


  • AndroidJavaObject 代表一个java对象, 例如com.nobo.unity.Util, 有一个构造函数Util(String name, int age), 有一个方法checkPermission()

    可以new AndroidJavaObject(“com.nobo.unity.Util”,“wilfried”,18).call(“checkPermission”), 就相当于 new Util(“wilfried”,18).checkPermission();

缺点

  • 启动unity动画时可能会很耗时,但是Unity在导出的时候可以设置启动unity时的loading动画,应该可以规避此问题
  • 对手机性能影响比较大
  • UnityPlayer.quit()调用的时候会杀死当前进程,所以我们需要为界面创建新的进程
  • android为Unity定义的方法,被调用的线程不是android的主线程,如果需要操作UI需切换到主线中进行操作

参考文献

android与Unity3d交互
关于Unity和Android交互的那些坑
Unity3D研究院之与Android相互传递消息(十九)
Android与Unity交互以及各种踩的坑
bilibili视频讲解

Demo示例

UnityDemo

以上是关于Android与Unity的交互的主要内容,如果未能解决你的问题,请参考以下文章

Android与Unity的交互

unity 与android交互

Unity与Android交互之✨| 使用AndroidJavaProxy代理方式,让Android与Unity通讯

unity3d与android交互的sdk怎么接

Unity与Android交互(双端通信)

Unity与Android交互(双端通信)