Unity3d能够直接打包成APK或Android项目供Android二次开发android
先介绍一下u3d中调用Android的一些API
UnityPlayer是unity3d引擎自带jar包,两端通讯的关键。
currentActivity是Android须要的上下文。bash
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是全局的,其余类或方法均可以使用,不用从新获取实例spa
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的方法须要的参数
}
}
复制代码
效果图 3d
默认的UnityPlayerActivity类通常不动,咱们新建一个MyClass继承UnityPlayerActivity 调用u3d方法,第一个参数是u3d中的对象名,第二个是方法名,第三个是参数
UnityPlayer.UnitySendMessage(“GameObject”, “unityMethod”, “hi~”);code