Unity与安卓交互实现和简单解析

unity调用安卓方法具体代码:

AndroidJavaClass ajc = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" );
AndroidJavaObject jo = ajc.GetStatic("currentActivity");
jo.Call("functionName ");

每次急着用都复制黏贴,改一下最后的方法名,没有仔细看具体实现,这次就来记录一下 加深印象。
  1. Call是个方法吧,那参数和返回值呢?是调用的什么类型的方法?
  2. 这个com.unity3d.player.UnityPlayer是什么?currentActivity又是什么? 
1、首先解释第一个问题Call
Call是Unity3d调用Android所设置的api之一,还有一些常用的:

通过这些方法,我们可以调用实例方法、静态方法,获取实例变量、静态变量,设置实例变相、静态变量等操作。

上面的例子是调用无参数、无返回值得方法,也可以调用带参数和返回值的,具体代码如下:

Android 带参数方法:
 
public void AndroidFuncWithArgs(String str, int i)
{
Log.i(U2ATAG, "u3dCall Android Str|int is " + str + "|" + i);
}

unity 调用代码

jo.Call("AndroidFuncWithArgs","TestArg",100);

Android 带返回值方法:

Public string AndroidFuncWithReturn()
{
     return “This is a AndroidFuncWithReturn function”;
}

Unity 调用代码:

string str = ajo.Call("AndroidFuncWithReturn");
Debug.log(str);

通过上面几个常用的方式,不难理解 ajc.GetStatic("currentActivity");这句代码就是获得类型为 AndroidJavaObject 的静态变量 currentActivity 的值 AndroidJavaObject 类型 是unity中最基本的JavaObject类型

2、什么是com.unity3d.player.UnityPlayer

通过反编译Unity3d生成的apk发现,UnityPlayer是FrameLayout的一个子类,而currentActivity则是UnityPlayer类中的静态对象。
所以 UnityPlayer 是一个Unity3d生成的一个类,通过new(”类名”)的方式获取该类,然后通过getStatic获取到了currentActivity这个静态对象。currentActivity 我们按照名字理解就是当前activity,currentActivity如何赋值的、通过currentActivity 如何调用到对应的“funcName”方法的?没有研究过底层调用代码 并不清楚,姑且记住他们的功能吧。
安卓调用Unity方法具体代码: 
Unity声明函数代码:
  public void UnityFuncCallback(string str)
    {
        print("andToU3dCallback string is " + str);
    }
安卓调用代码:
   public void andToU3d()
    {
        UnityPlayer.UnitySendMessage(OBJNAME, "UnityFuncCallBack", "UnityFuncCallBack_test");
    }

UnityPlayer.UnitySendMessage  方法解释:第一个参数 方法所长脚本挂靠的GameObject名称,第二个参数 方法名,第三个参数 方法传入实际参数。(IOS调用Unity的函数 也是通过UnitySendMessage方法实现




你可能感兴趣的:(Unity与安卓交互实现和简单解析)