Unity侧:
AAR文件可以放在assets目录的任何地方
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject unityContext = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
这三步能拿到大多数aar需要的context,activity
AndroidJavaClass.CallStatic(methodName, parameter0, parameter1, pameter2);
使用最上面的方法得到Android Class后,内部的static方法,用这个方法调用。多个参数依次排列在方法名字后面即可(官方文档没有例子,使用了数组形式,没测过)
AndroidJavaClass.Call(methodName, parameter0, parameter1, pameter2);
调用实例的方法。
Java侧:
com.unity3d.player包中,有类
UnityPlayer,提供方法UnitySendMessage(GameObjectName, MethodName, parameter)
该类的反编译结果可以在这里看到。截取方法的定义如下:
public static native void UnitySendMessage(String var0, String var1, String var2);
写插件的过程中,如果不想让java侧代码一定跟Unity3d绑定,那么可以使用java的反射来取得上面的方法。
Class playerClass = Class.forName("com.unity3d.player.UnityPlayer"); Log.d("MyTag", playerClass.toString()); Method sendMessageMethod = playerClass.getMethod("UnitySendMessage", String.class, String.class, String.class); Log.d("MyTag", sendMessageMethod.getName() + ", " + sendMessageMethod.toString());