基础
Unity3d可以直接打包成APK或Android项目供Android二次开发
Unity3d调用Android方法
先介绍一下u3d中调用Android的一些API
UnityPlayer是unity3d引擎自带jar包,两端通信的关键。
currentActivity是Android需要的上下文。
AndroidJavaClass ajc=new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject ajo=ajc.GetStatic(“currentActivity”);
jo.Call(method ,parameter ); //调用实例方法
jo.Get(method ,parameter ); //获取实例变量
jo.Set(method ,parameter ); //设置实例变量
jo.CallStatic(method ,parameter );//调用静态方法
jo.GetStatic (method ,parameter );//获取静态变量
jo.SetStatic (method ,parameter );//设置静态变量
有了这些API就可以开启与Android的通信了,可以我们自己写Android代码,也可以用别人写好的,只要知道它的类名,方法名和需要的参数。
u3d调用代码,ao就是上面第一步Android代码需要的context,这个ao是全局的,其他类或方法都可以使用,不用重新获取实例
void OnGUI()
{
if (GUI.Button(new Rect(150, 150, 250, 135), "调用Android原生方法"))
{
AndroidJavaClass ac = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ao = ac.CallStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject androidClass = new AndroidJavaObject("cn.nutown.android_project.MyAndroidClass");//我们Android的类名
androidClass.Call("showMassege",ao,"hi!");//对应我们Android的方法需要的参数
}
}
效果图

Android调用Unity3d方法
默认的UnityPlayerActivity类一般不动,我们新建一个MyClass继承UnityPlayerActivity
调用u3d方法,第一个参数是u3d中的对象名,第二个是方法名,第三个是参数
UnityPlayer.UnitySendMessage(“GameObject”, “unityMethod”, “hi~”);