Unity3d和Android之间互相调用

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述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的形式进行接入
对比
Unity3d和Android之间互相调用

文章图片

No7:
只有当需要在Activity的生命周期中执行一些操作时,我们才需要一个中间Activity去完成这些与生命周期相关的操作,而其他情况下,一个Class足以
No8:
Unity调用Android方法默认不是在UI主线程上执行的,所以如果你想要对UI界面进行操作,那就要使用runOnUiThread才行。
No9:
每个渠道SDK有两个class,一个管理账号信息,一个管理支付信息,账号与支付分离
No10:
【Unity3d和Android之间互相调用】调用上,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之间互相调用

文章图片


    推荐阅读