Unity3d和Android之间互相调用
摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完
No1:
总体来说Unity3d与Android之间的互相调用,是通过Unity3d提供的classes.jar来实现的
No2:
常见的方法就是
1)在Android层定义好接口
2)在Unity中通过反射调用(反射大法好啊,真是好)
No3:
UnityPlayer是FrameLayout的一个子类,而currentActivity则是UnityPlayer类中的静态对象。
No3:
我们一般建立了一个新的MyActivity继承UnityPlayerActivity,并在AndroidManifest中把MyActivity设置为启动的Activity,然后使用currentActivity这个jo来调用方法。
No4:
新版Unity生成的unity-class.jar中类的继承关系变简单了:UnityPlayerActivity->Activity,之前的UnityPlayerNativeActivity被废弃了
No5:
UnityPlayerActivity中
mUnityPlayer = new UnityPlayer(this);
把上下文传进去
在UnityPlayer中
public UnityPlayer(Context var1) {
super(var1);
if (var1 instanceof Activity) {
currentActivity = (Activity)var1;
}
把上下文传给currentActivity,所以currentActivity就是当前的上下文
No6:
Android SDK的接入一般分为两种
1)一种是把Unity的工程导出google project的形式进行接入
2)另一种是通过把Android的工程做成Plugins的形式进行接入
对比

No7:
只有当需要在Activity的生命周期中执行一些操作时,我们才需要一个中间Activity去完成这些与生命周期相关的操作,而其他情况下,一个Class足以
No8:
Unity调用Android方法默认不是在UI主线程上执行的,所以如果你想要对UI界面进行操作,那就要使用runOnUiThread才行。
No9:
每个渠道SDK有两个class,一个管理账号信息,一个管理支付信息,账号与支付分离
No10:
调用上,C#初始化“包名+类名”的AndroidJavaClass对象,使用这个对象来调用对应功能
No11:
Activity生命周期的处理:(C#处理的方式)
android代码
public void lifeCycle(int status) {
if (getActivity() == null) {
DybGSdkUtil.E("还未Init初始化,不执行生命周期操作 ");
return;
}
switch (status) {
case DybGSdkConstants.onStart:
break;
case DybGSdkConstants.onResume:
BuoyOpenSDK.getIntance().showSmallWindow(getActivity());
break;
case DybGSdkConstants.onPause:
BuoyOpenSDK.getIntance().hideSmallWindow(getActivity());
BuoyOpenSDK.getIntance().hideBigWindow(getActivity());
break;
case DybGSdkConstants.onStop:
break;
case DybGSdkConstants.onDestroy:
OpenHwID.releaseResouce();
BuoyOpenSDK.getIntance().destroy(getActivity());
break;
default:
break;
}
}
C#调用
void OnApplicationPause(bool isPause)
{
if (isPause) {
string json = "{'status':'3'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
} void OnApplicationFocus(bool isFocus)
{
if (isFocus)
{
if (ajc_SDKCall != null){
string json = "{'status':'1'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
json = "{'status':'2'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
}
} void OnApplicationQuit()
{
string json = "{'status':'5'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
// Android Activity生命周期
public static final int onStart = 1;
public static final int onResume = 2;
public static final int onPause = 3;
public static final int onStop = 4;
public static final int onDestroy = 5;
public static final int onRestart = 6;
No12:
如果想从android层传数据到unity层,使用UnityPlayer.UnitySendMessage(OBJNAME, "andToU3dCallback", "exit");方法
切记:这个API需要大写S开头的Send才能调出来,小写s开头的send调不出来,坑爹啊
欢迎关注我的微信公众号:安卓圈

Unity3d和Android之间互相调用的更多相关文章
- uLua学习笔记(三):Unity3D和Lua之间的相互调用
这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...
- 两个APP之间怎么调用《IT蓝豹》
两个app之间怎么调用? (1):通过显示Intent 启动 首先:配置好B app 的action,即AndroidManifest.xml中声明 <intent-filter> ...
- Android 使用AIDL调用外部服务
好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...
- Android使用ksoap2调用C#中的webservice实现图像上传
目录: 一. android使用ksoap2调用webservice 二. 异步调用 三. Android使用ksoap2调用C#中的webservice实现图像上传参考方法 四. 图像传输中Base ...
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- Android上传图片之调用系统拍照和从相冊选择图片
Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...
- Java特性之多态父类与子类之间的调用
问题描述: Java三大特性,封装.继承.多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用.下面是一个测试类,源代码如下: package com.test; public c ...
- html iframe 元素之间的调用
html iframe 元素之间的调用一.简介 一般需要引入一个独立页面的时候,我们会使用iframe.在业务需要的时候,我们需要在父页面与iframe页面之间进行交互.交互的时候,我们就需要使 用到 ...
- 在Android开发中调用Rest web服务(转)
首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...
随机推荐
- luogu P2511 [HAOI2008]木棍分割
传送门 第一问是一道经典的二分,二分答案\(ans\),然后从前往后扫,判断要分成几段救星了 第二问设\(f_{i,j}\)表示前\(i\)个数分成\(j\)段,每段之和不超过第一问答案的方案,转移就 ...
- snmp 发送类型ASN_OBJECT_ID
参考链接: http://blog.csdn.net/yin138/article/details/50388878 ,,,,,,,,,}; int ret = snmp_set_var_typed_ ...
- 数据库运维平台~inception回滚功能
一 简介:inception的另一个激动人心的功能,很强大.二 功能简介: inception会针对已经执行sql语句进行1 记录 2 生成回滚语句三 备份: 1 启用远程备份机制(强烈建议一台单 ...
- ViewPager制作APP引导页+若干动画效果
ViewPager使用FragmentStatePagerAdapter做Adapter,引导页使用多Fragment形式. 见http://www.cnblogs.com/bmbh/p/567276 ...
- 公共模块定义/草案(Common Module Definition / draft - CMD草案)
This specification addresses how modules should be written in order to be interoperable in browser-b ...
- Mybatis入门学习笔记
1.定义别名 在sqlMapConfig.xml中,编写如下代码: <!-- 定义别名 --> <typeAliases> <!-- type: 需要映射的类型 alia ...
- input框的输入限制
1.输入数字 <input onKeyUp="value=value.replace(/[^\d|chun]/g,'')"> 2.只输入中文 <input typ ...
- 【逆向工具】使用x64dbg+spy去除WinRAR5.40(64位)广告弹框
1 学习目标 WinRAR5.40(64位)的弹框广告去除,由于我的系统为x64版本,所以安装了WinRAR(x64)版本. OD无法调试64位的程序,可以让我熟悉x64dbg进行调试的界面. 其次是 ...
- 深入理解node.js异步编程:基础篇
###[本文是基础内容,大神请绕道,才疏学浅,难免纰漏,请各位轻喷] ##1. 概述 目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平 ...
- Python3学习笔记09-字典
字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 键必须是唯一的,但值则不必 ...