Unity与Android的Back键冲突解决

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" />

就解决问题了

猜你喜欢

转载自blog.csdn.net/qq_33205561/article/details/72788740