在Android中,我们可以通过反射由Native 调用Java层代码,在Java层通过JNI调回Native,那在Unity开发的游戏中,是怎么实现与Java层的交互?
Unity向Java层传递消息
Unity 的Android游戏一般有一个主Activity,即 com.unity3d.player. UnityPlayerNativeActivity
, 这个Activity的实例为com.unity3d.player.UnityPlayer -> currentActivity
Unity 脚本中,可以通过 AndroidJavaClass
和AndroidJavaObject
来实现类似于反射的调用。脚本如下:
message = GUILayout.TextField (stringToEdit, GUILayout.Width(300),GUILayout.Height(100));
if(GUI.Button(new Rect(10,120,200,100),"调用Android方法")){
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using( AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
//要传递过去的参数
object[] message=new object[2];
message [0] = 1;
message [1] = message;
jo.Call("OnUnityMessage",message);
}
}
}
Java向Unity传递消息
Java 向Unity传递消息只有一行代码
UnityPlayer.UnitySendMessage("Main Camera", "OnAndroidMessage", message);
参数1: 表示要发送对象(GameObject-> name)的名称,我们可以在Unity中通过为GameObject的name赋值来确定,或者直接写入已知名称如上 Main Camera
;
参数2:表示对象脚本中的方法名(非静态);
参数3:参数;
注意:Java向Unity传递消息只能发送到对象,不能发送给静态方法;