广告
返回顶部
首页 > 资讯 > 移动开发 >Unity同步/异步调用Android的方法实例
  • 483
分享到

Unity同步/异步调用Android的方法实例

2024-04-02 19:04:59 483人浏览 安东尼
摘要

目录1 Unity如何使用Android插件2 同步方法如何调用2.1 例子12.2 例子23 异步方法如何调用3.1 Android端3.1.1 添加依赖3.1.2 代码逻辑3.2

1 Unity如何使用Android插件

很简单,把android的模块,打包成aar或者jar,放到Assets/Plugin/Android即可!

2 同步方法如何调用

2.1 例子1

Android端

假设Android有一个方法


    public static String GetVideoParams() {
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(LOCAL_VIDEO_PATH);
        String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); //宽
        String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); //高
        Log.w(TAG, "GetVideoParams, width " + width + " height " + height);
        return width +"_" + height;
    }

Unity端

则Unity的C#脚本,可以这么写:


AndroidJavaObject androidVideoPlugin = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.VideoPlugin");
String width_height = androidVideoPlugin.CallStatic<String>("GetVideoParams");

其中com.iqiyi.cutgreenvideosdk.VideoPlugin是Android方法的包名和类名。
CallStatic<String>即表示,调用某个类的静态方法,且返回值是String。如果返回值要Int或者bool啥的,对应修改即可,例如CallStatic< bool >。

2.2 例子2

Android端

Android有一个方法


public void start(Context context, int externalTextureId) {
....
}

这个不是静态的方法了,但需要传递context对象。

Unity端


AndroidJavaObject androidVideoPlugin = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.VideoPlugin");
//get activity
 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3D.player.UnityPlayer");
            AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            
 androidVideoPlugin.Call("start", activity, 1);

Call后面是android端的方法名,以及参数。

3 异步方法如何调用

异步的话,可以这样:

Unity发起调用,Android处理调用,并通过消息,通知给Unity。

具体而言。首先,Java是有办法向C#发消息的:

UnityPlayer.UnitySendMessage

这个类的调用方式:

UnityPlayer.UnitySendMessage(“GameObjectName”, “MethodName”, “parameter to send”);

第一个参数,是Unity的对象名字,注意,不是脚本名字喔!!!

第二个参数,是挂载在Unity对象的某个脚本的方法名称

第三个参数,是方法的参数。

3.1 Android端

3.1.1 添加依赖

首先,要把UnityPlayer依赖进来。在哪里呢?

在你的Unity安装目录下,Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
里面有个classes.jar,拿出来,放到Android工程,具体模块的libs目录下。

然后android gradle添加依赖:


dependencies {
    compileOnly files('libs/classes.jar')
}

当然了,你开心的话,也可以把jar改个名字。

注意,需要compileOnly而不是implementation,否则打包aar到Unity后,会把libs目录也打包到aar,最后Unity编译apk会失败,因为有重复的classes.jar。

3.1.2 代码逻辑


    private static String mGameObject = "";
    private static String mCallbackFunction = "";

    public static void checkPermission(Context context, String gameObject, String callbackFunction) {
        Log.i(TAG, "checkPermission gameObject " + gameObject + " callbackFunction " + callbackFunction);
        mGameObject = gameObject;
        mCallbackFunction = callbackFunction;
        //TODO 做实际处理,例如请求权限
    }

	//处理完事情,通过消息告诉Unity结果
    private static void notifyResult(boolean permissionGranted) {
        try {
            //参数1, 脚本挂载的gameObject名称,参数2, 脚本方法,参数3,返回值
            Log.w(TAG, "notifyResult, permissionGranted " + permissionGranted + " mGameObject " + mGameObject + " mCallbackFunction " + mCallbackFunction);
            UnityPlayer.UnitySendMessage(mGameObject, mCallbackFunction, permissionGranted ? "1" : "0");
            getInstance().mContext = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上面的checkPermission由Unity调用。notifyResult则是处理完事情,通过消息告诉Unity结果。

3.2 Unity端

首先是调用的方法:


    private void checkPermission()
    {
        Debug.Log(TAG + "checkPermission");
        AndroidJavaObject nativeObject = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.PermissionHelper");
        nativeObject.CallStatic("checkPermission", activity, "AndroidVideoScreen", "onPermissionResult");//AndroiwdVideoScreen 为脚本挂载的对象,onPermissionResult为脚本监听回调的函数名称 
    }

这里,把脚本所挂载的对象名字,即AndroidVideoScreen,传递给了Android。以及把脚本处理的回调函数名称onPermissionResult,也告诉Android。

接着,就是实现onPermissionResult, 等着接收回调了:


    public void onPermissionResult(String resultCode)
    {
       //TODO
    }

总结

到此这篇关于Unity同步/异步调用Android的文章就介绍到这了,更多相关Unity同步异步调用Android内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Unity同步/异步调用Android的方法实例

本文链接: https://www.lsjlt.com/news/133906.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Unity同步/异步调用Android的方法实例
    目录1 Unity如何使用Android插件2 同步方法如何调用2.1 例子12.2 例子23 异步方法如何调用3.1 Android端3.1.1 添加依赖3.1.2 代码逻辑3.2...
    99+
    2022-11-12
  • Vue中的同步调用和异步调用方式
    目录Vue的同步调用和异步调用Promise实现异步调用async /await方法实现同步调用Vue同步和异步的问题基本语法实例Vue的同步调用和异步调用 Promise实现异步调...
    99+
    2022-11-13
  • Vue中的同步调用和异步调用怎么实现
    这篇“Vue中的同步调用和异步调用怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的同步调用和异步调用怎么实现...
    99+
    2023-06-28
  • Java中使用同步回调和异步回调的示例详解
    目录(一)同步回调(1)匿名内部类回调(2)Lambda 回调(二)异步回调(1)简单的线程回调(2)异步并行回调(3)CompletableFuture 回调小结完整代码(一)同步...
    99+
    2023-05-16
    java同步回调 java异步回调 java异步和同步回调
  • C#中怎么实现同步调用和异步调用
    今天就跟大家聊聊有关C#中怎么实现同步调用和异步调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线...
    99+
    2023-06-17
  • Android异步回调中的UI同步性问题分析
    Android程序编码过程中,回调无处不在。从最常见的Activity生命周期回调开始,到BroadcastReceiver、Service以及Sqlite等。Activity...
    99+
    2022-06-06
    回调 Android
  • Golang函数的同步和异步的实现方法
    Golang是一种支持并发编程的高级编程语言,它提供了丰富的并发编程机制和语法特性,方便开发者实现复杂的多线程或多协程程序。其中,同步和异步是并发编程中常用的两种方式,本文将介绍Golang函数的同步和异步的实现方法及其使用场景。一、同步函...
    99+
    2023-05-18
    异步 同步 Golang函数
  • java异步调用的4种实现方法
    目录一.利用多线程直接new线程使用线程池二.采用Spring 的异步方法去执行(无返回值)@Async注解可以用在方法上,也可以用在类上,用在类上,对类里面所有方法起作用三.采用S...
    99+
    2022-11-13
  • JavaScript异步操作同步执行的方法
    本文小编为大家详细介绍“JavaScript异步操作同步执行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript异步操作同步执行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2022-10-19
  • java异步转同步的方法是什么
    Java中实现异步转同步的方法有多种,下面列举了几种常用的方法。 使用CountDownLatch: CountDownLatch...
    99+
    2023-10-24
    java
  • java中@Async异步调用的方法
    本篇内容主要讲解“java中@Async异步调用的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中@Async异步调用的方法”吧!前言异步调用与同步调用同步调用:顺序执行,通过调用返...
    99+
    2023-07-02
  • SpringBoot中异步调用@Async的方法
    本篇内容主要讲解“SpringBoot中异步调用@Async的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中异步调用@Async的方法...
    99+
    2022-10-19
  • unity调用android的方法有哪些
    在Unity中调用Android的方法可以使用以下几种方式:1. 使用Java Native Interface(JNI):这是一种...
    99+
    2023-09-16
    unity android
  • Java中异步转同步的方法有哪些
    今天小编给大家分享一下Java中异步转同步的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、问题应用场景应用中通...
    99+
    2023-07-02
  • rabbitmq同步调用的方法是什么
    RabbitMQ是一个消息中间件,它主要用于在不同的应用程序之间传递消息。它支持异步消息传递,但不直接支持同步调用。然而,可以使用一...
    99+
    2023-10-26
    rabbitmq
  • java异步调用的实现方法有哪些
    在Java中,有以下几种方式可以实现异步调用:1. 使用Thread类:可以通过创建和启动一个新的线程来实现异步调用。这种方式比较底...
    99+
    2023-08-12
    java
  • Android加载对话框同时异步执行实现方法
    Android中通过子线程连接网络获取资料,同时显示加载进度对话框给用户的操作,需要Thread和Handler来完成,在Thread中执行比较耗时的代码,完成后再通过Hand...
    99+
    2022-06-06
    方法 异步执行 异步 Android
  • Vue中的同步和异步调用顺序详解
    目录Vue的同步和异步调用顺序例如Vue两个异步方法顺序执行第一个异步方法第二个异步方法Vue的同步和异步调用顺序 Vue中的方法调用顺序是依次进行的,方法体内部也是依次执行的,但是...
    99+
    2022-11-13
  • Java异步调用的方法是什么
    这篇文章主要讲解了“Java异步调用的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java异步调用的方法是什么”吧!一、创建线程@Testpublic void&nbs...
    99+
    2023-06-27
  • Python同步方法变为异步方法的小技巧分享
    目录背景怎么做?Asyncerawaitableaioify总结背景 在我们平时的FastApi工作中,经常会用到一些异步的操作,为了保持一致,我们一般会编写配套的异步代码。 但如果...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作