Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用
来源:互联网 发布:js confirm 样式 编辑:程序博客网 时间:2024/05/18 04:25
一、前言
内容分为三部分,分三篇写完
- 前篇:Unity3d 与 Android之间的互相调用
- 中篇:Unity3d Android SDK的两种接入方式
http://blog.csdn.net/yang8456211/article/details/51356193 - 后篇:Unity3d 接入Android Libriary的理解与实现
http://blog.csdn.net/yang8456211/article/details/51435465
二、前篇:Unity3d 与 Android之间的互相调用
总体来说Unity3d与Android之间的互相调用,是通过Unity3d提供的classes.jar来实现的(具体实现在中篇说)。
那么下面假设已经按照要求建立好了Android的工程,并配置好了classes.jar,开始写调用:
2.1 Unity3d调用Android
最常见的写法:
1)首先在Android层写好接口u3dCall
这个方法只打印成功的提示:
- 1
- 2
- 3
- 1
- 2
- 3
2)在Unity3d cs脚本中调用Android
通过反射机制拿取对象并调用Android的接口u3dCall,这里我们画了一个Button,点击Button调用u3dCall接口:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
通过打印看到,我们成功的从Unity3D调用到了Android的代码。
(没有充满疑问?)
- 这个com.unity3d.player.UnityPlayer是什么东西?currentActivity又是什么?
- Call是个方法吧,那参数和返回值呢?是调用的什么类型的方法?
只有通过实践慢慢探索,才能知道真相
3)Unity3d调用Android接口的api
我们先说第二个问题,Call只是Unity3d调用Android所设置的api之一,还有一些常用的:
通过这些方法,我们能够方便的调用静态方法、实例方法,还有获取变量的值。
如果Android的方法是需要传入参数的,则如下:
Android:
- 1
- 2
- 3
- 1
- 2
- 3
U3d:
- 1
- 1
成功调用:
如果需要返回值:
Android:
- 1
- 2
- 3
- 1
- 2
- 3
U3d:
- 1
- 2
- 1
- 2
成功调用:
其他的方法类似,可以猜到jo = jc.GetStatic(“currentActivity”);的意思,就是通过GetStatic获取了静态变量currentActivity的值,它的类型是AndroidJavaObject(Unity3d的JavaObject的基本类型)。
4) 那UnityPlayer是什么?
通过反编译Unity3d生成的apk发现,UnityPlayer是FrameLayout的一个子类,而currentActivity则是UnityPlayer类中的静态对象。
致此,就弄明白了,这个UnityPlayer原来就是一个Unity3d生成的一个类,我们通过new(”完整类名”)的方式获取到了这个类,然后通过getStatic获取到了currentActivity这个静态对象。
(那么问题又来了,currentActivity这个类是怎么找到我写的方法的呢?)
5)MyActivity与currentActivity
我刻意的避开了中篇要讲的内容,但如果一点不提,感觉问题始终不能讲明白,所以这里就稍微说明一下。
在写Android工程的时候,网上一般要求我们建立了一个新的MyActivity继承UnityPlayerActivity,并在AndroidManifest中把MyActivity设置为启动的Activity,然后使用currentActivity这个jo来调用方法。
为什么要这么做呢?通过观察发现,他们的继承关系是这样的:
MyActivity <-- UnityPlayerActivity <--UnityPlayerNativeActivity <-- NativeActivity<-- Activity
(然而里面并没有com.unity3d.player.UnityPlayer这个class?)
继续查找源码发现,在 UnityPlayerNativeActivity 这个类中,声明了一个UnityPlayer对象
在oncreate方法里面初始化了这个对象,把UnityPlayerNativeActivity上下文作为参数传了进去
然后在UnityPlayer类的构造方法中,把当前的上下文赋值给了currentActivity
所以,我们使用的currentActivity 就是当前activity的上下文。写到这里,我还有一个疑问,就是currentActivity是拿到的UnityPlayerNativeActivity的上下文,但是是怎么调用到的Myactivity里面的方法的呢?希望知道的人告诉我。
2.2 Android调用Unity
如果想要异步的发送消息回Unity那么应该怎么处理呢?就是使用Unity3d的UnitySendMessage发送回去
Android:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
U3d:
- Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用
- Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用
- Unity3d 与 Android之间的互相调用
- Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式
- Unity3d Android SDK接入解析
- Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件
- Unity3d和Android的互相调用(一)
- unity3d android sdk接入
- Unity3d与Android交互-SDK接入总结
- Unity3d Android SDK接入解析(三)接入Android Library的理解(爱贝云支付为例)
- Unity3D接入SDK教程:简洁明了的Unity3D与Android互调DEMO
- Unity3D调用Android SDK
- Unity3d和Android的互相调用(二)
- Android与JS之间的互相调用交互(一)
- android与unity3d互相交互
- unity3d接入有米广告SDK----android
- unity3d接入有米广告SDK----android
- Unity3D如何接入第三方的SDK - Android篇
- matlab 微积分
- JSQLParser源码分析之CreateTable
- DB 查询分析器7.01 新增的保存执行结果到多个文件功能
- inline内联的用法与作用
- instanceof判定类的实例
- Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用
- [Manacher 线段树 离线] 2015 计蒜之道 初赛 第三场 商品推荐走马灯
- Android RecyclerView
- 利用scp 远程上传下载文件/文件夹,ssh上传下载文件
- RelativeLayout相对布局
- ecshop模板动态引入lbi
- android下获取无线wif信号、ssid、MAC等操作类
- 票据:汇票业务解析
- Flex布局——色子的小案例