Unity3D开发之c#主导调用安卓功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33994566/article/details/82682110

公司一直没有盈利项目,我们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的原理差不多。

猜你喜欢

转载自blog.csdn.net/qq_33994566/article/details/82682110
今日推荐