摘抄博客 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调不出来,坑爹啊

欢迎关注我的微信公众号:安卓圈

最新文章

  1. mybatis 中的where标签
  2. lua定义一个简单的类
  3. Ubuntu-搜狗输入法
  4. Android的Activity屏幕切换动画-左右滑动切换
  5. IIS6_IIS7日志文件位置
  6. android初学-togglebutton
  7. C#_Ajax分页MVCPager
  8. ANDROID_MARS学习笔记_S04_006_用获取access_token,access_token_secrect
  9. iOS8中添加的extensions总结(四)——Action扩展
  10. phpcms V9 联动菜单的调用
  11. 解决APP中fragment重叠问题
  12. [2017BUAA软工]第0次个人作业
  13. mysql单独可连接,php连接mysql失败之 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  14. HDU [P1150] Machine Schedule
  15. scrapy爬取中关村在线手机频道
  16. 平衡二叉树(AVL)介绍及其实现
  17. Eclipse连接HBase 报错:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
  18. 第43章:MongoDB-集群--Sharding(分片)--多机的搭建
  19. 百度地图API,展示地图和添加控件
  20. 斗鱼宣布获C轮15亿融资 直播行业进入资本时代

热门文章

  1. CSS进阶之模拟Bootstrap网格布局
  2. 近几年杭电OJ大型比赛题目合集【更新到2017年11月初】
  3. D - 文理分科 HYSBZ - 3894(最小割)
  4. JavaScript学习 - 基础(一)
  5. 2017/05/04 java 基础 随笔
  6. nginx入门二
  7. Hacker学习发展流程图
  8. Mac下的安装 mongodb
  9. Redis简介+常用命令
  10. Vue.js——理解与创建使用