摘抄博客 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. android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLIT
  2. Android 自定义属性时TypedArray的使用方法
  3. Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例
  4. android v7包 正常导入使用方法
  5. Java之IO流操作
  6. Could not find *****/adb.exe!的解决方法(android sdk太新了?**#
  7. 转帖并消化:Android中一种使用AttributeSet自定义控件的方法
  8. Android Inflate()方法用途

随机推荐

  1. Android(安卓)使用SharedPreferrences储
  2. android状态栏一体化(改变状态栏的背景颜
  3. android取得json数据
  4. Android关于view按键音的修改
  5. Android(安卓)vold核心篇(VolumeManager)
  6. Android(安卓)图片加载笔记
  7. Android(安卓)ViewPager切换的N种动画
  8. Ionic 程序打包发布Android版本
  9. android 环境配置和安装, Android系统包
  10. Android中清楚Cookie和WebView的缓存