unity调用安卓方法具体代码:
AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("functionName ");
每次急着用都复制黏贴,改一下最后的方法名,没有仔细看具体实现,这次就来记录一下 加深印象。
Call是个方法吧,那参数和返回值呢?是调用的什么类型的方法?
这个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<AndroidJavaObject>("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方法实现)
---------------------
作者:草帽轩轩
来源:CSDN
原文:https://blog.csdn.net/u010407393/article/details/79423769
版权声明:本文为博主原创文章,转载请附上博文链接!