• 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调不出来,坑爹啊

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

  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8794869.html
Copyright © 2020-2023  润新知