阅读 155

Unity3d与Android通信

基础

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的方法需要的参数
        } 
}
复制代码

效果图

avatar

Android调用Unity3d方法

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

关注下面的标签,发现更多相似文章
评论