Unity3D開發之c#主導呼叫安卓功能
阿新 • • 發佈:2018-12-09
公司一直沒有盈利專案,我們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的原理差不多。