1. 程式人生 > >Unity3D開發之c#主導呼叫安卓功能

Unity3D開發之c#主導呼叫安卓功能

公司一直沒有盈利專案,我們3d組要解散。我也一直在找工作。找工作真的太糟心了。我想進的公司都不要我,要我的公司我都不太滿意。其實我一直是想去想去做手遊的。唉,有些公司連面試的機會都不給。好生氣 哈哈。最近一直在等訊息,我一個博士師傅昨天讓我去做模擬方向。我也在糾結到底該怎麼選擇。

最近幾天也沒閒著,沒事看看教程學習學習新的東西。看了unity和安卓的互動以及shareSDK的使用。unity調安卓感覺和lua調c#一樣的形式。只要掌握一些語法,就可以很輕鬆使用了。下面是記錄我在學習中的一些知識。

一. c#呼叫安卓端的函式

我們經常在安卓源生端寫一些呼叫的函式來處理一些事件,將寫好的libaray打包成aar包供unity端呼叫。在c#這面的呼叫程式碼如下:

 //com.unity3d.player.UnityPlayer包下的UnityPlayer類
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //獲得jc所代表的類下的CurrentActivity物件
        AndroidJavaObject jo = new AndroidJavaObject("CurrentActivity");

        jo.Call<T>("methodName",params[] args);

二.c#呼叫安卓製作Toast

public static void MakeToast(string msg)
    {
        AndroidJavaObject jo = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
        AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
        jo.Call("runOnUiThread", new AndroidJavaRunnable(() =>
        {
            Toast.CallStatic<AndroidJavaObject>("makeText", jo, msg, Toast.GetStatic<int>("LENGTH_LONG")).Call("show");
        }));
    }

三.AndroidJavaProxy

在我理解來,AndroidJavaProxy就是用來對映安卓介面的。當我們在unity端呼叫安卓的一些函式,看到一些繼承介面的函式時,我們就可以在c#這裡使用AndroidJavaProxy對映來實現介面。

public class Test : MonoBehaviour { 

    private static DateTime selectDate = DateTime.Now;
    class DataCallBack:AndroidJavaProxy
    {
        public DataCallBack():base ("android.app.DataPickerDialog$OnDateSetListener")
        {
        }

        void onDateSet(AndroidJavaObject view,int year,int month,int dayOfMonth)
        {
            //TODO
        }
    }

	// Use this for initialization
	void Start () {
        AndroidJavaObject currentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("CurrentActivity");
        currentActivity.Call("runOnUiThread",new AndroidJavaRunnable(()=> {
            new AndroidJavaObject("android.app.DatePickerDialog", currentActivity, new DataCallBack(), selectDate.Year, selectDate.Month - 1, selectDate.Day).Call("show");//android.widget.DataPicker
        }));
    }

其實以上就是一些固定格式,查詢到android端得源函式,我們在unity這裡使用封裝好的一些類對映呼叫。和lua呼叫unity的原理差不多。