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

就解决问题了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值