AR移动应用开发(三) Unity与Android的Back键冲突解决

来源:互联网 发布:中国家居建材 知乎 编辑:程序博客网 时间:2024/06/14 21:30

AR移动应用开发(三) Unity与Android的Back键冲突解决

 上一篇的最后留下了两个问题
  1. Unity视图下横屏闪退
  2. Unity视图下Android无法响应back返回上一activity

对于第一个问题,应该是Unity横屏下视图的某些设置跟Android那边xml的屏幕横屏配置有冲突引起的。根据老师的提醒,在manifest的Unity视图的activity子节下加入了

android:configChanges="keyboardHidden|orientation|screenSize"修改后的xml的部分内容:<activity android:name=".MainActivity_unity" android:configChanges="keyboardHidden|orientation|screenSize" />

问题就解决了。

      下面着重来解决Unity与Android的Back键冲突的问题。

这问题在网上也能搜到很多的解决方法。大部分都是从android端入手的。其实既然现在的状况是Unity能响应到Back键而Android端不能响应。 那么也就是可以通过从Unity端入手,为Unity写一个Back键的响应事件不就行了吗

我们在Unity端生成一个脚本,写上以下代码,挂在EasyAR_startUp上

    void Update () {        if(Input.GetKey(KeyCode.Escape))        {            Application.Quit();        }    }

然后按上次的步骤导入到android工程当中。结果这次Unity视图是退出了。但是整一个app都退出了。达不到只退回上一个activity的效果。
这样,不妨试试让Unity回调Android的函数。

代码脚本如下:

    void Update () {        if(Input.GetKey(KeyCode.Escape))        {            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");            jo.Call("onBackPressed");        }    }

我们这里让UnityPlayer回调 onBackPressed这一个函数。

于是我们把Unity重新生成一个android工程。

既然我们回调的UnityPlayer所在的 activity中的onBackPress函数,这样我们就在UnityPlayerNativeActivity重写一个onBackPress函数。

        @Override public void onBackPressed(){        runOnUiThread(new Runnable() {            @Override            public void run() {                mUnityPlayer.quit();            }        });        super.onBackPressed();    }

参考内容:
http://www.ithao123.cn/content-10465610.html
加上这句话后,虽然可以退出,但是却会提示错误。经过一轮找资料之后,猜测可能是进程相关的问题。所以尝试着给Unity的activity的xml加上

android:process="e.unity"就是完整的内容是:<activity android:name=".MainActivity_unity"            android:process="e.unity"            android:configChanges="keyboardHidden|orientation|screenSize" />

就解决问题了

阅读全文
1 0
原创粉丝点击