Unity3d和Android之間互相調用

來源:互聯網
上載者:User

標籤:restart   this   open   互相調用   ons   image   return   isp   ide   

摘抄部落格 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;

 

Unity3d和Android之間互相調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.