Unity响应Android的返回键,退出当前Activity

一:使用 Application.Quit()

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

如此,Unity 就能响应 Android 的 Back 按钮了。

 

但是!这个方法存在的问题是,退出当前 UnityPlayerActivity 的同时,会退出整个程序。因此对于想返回上一个 Activity 并不有效。

二:添加一个后退的 button 执行 mUnityPlayer.quit()

在 UnityPlayerActivity 类,存在 mUnityPlayer.quit() 方法,通过退出 unityplayer 来结束 UnityPlayerActivity。 于是就考虑在安卓端设置一个后退按钮如图:

设置该按钮的监听并执行 mUnityPlayer.quit():

bckbtn = (Button) findViewById(R.id.navigate_back); bckbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mUnityPlayer.quit(); } }); 

这样就能退出当前的 UnityPlayerActivity 并返回前一个 Activity 。

三:使用 Unity 调用 Android 响应 Back 按钮

为了最终实现响应手机的系统按键返回前一个 Activity,在这使用到了 Unity 和 Android 的交互,通过 Unity 中的脚本响应系统按键,再调用 Android 函数实现返回上一个Activity。关于 Unity 调用 Android 的函数,可参考:http://www.xuanyusong.com/archives/667 。

在此,首先在 Unity 的 C# 脚本中添加如下代码响应 Back 按钮:

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

在此先得到 AndroidJavaClass ,然后得到 AndroidjavaObject 就是当前 UnityPlayerActivity 的对象,拿到它的对象后调用jo.Call()参数表示调用 UnityPlayerActivity 类中的方法名称。
于是在 UnityPlayerActivity 下实现上面的 onBackPressed() 方法,并在该方法中实现 mUnityPlayer.quit(),那么问题就搞定了,Android 端 java 代码如下:

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

这里重写了系统的 onBackPressed() 函数。

 

就此,最终实现了 Unity 响应手机的系统返回键,成功返回上一级 Activity。

全部评论

相关推荐

在瑞幸干两年,奥特曼都得闪灯
不知名的牛友:奥特曼每天只上3分钟班
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 19:15
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务