当前位置: 首页 > >

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 ("currentActivity");
jo.Call ("onBackPressed");
}

在此先得到 AndroidJavaClass ,然后得到 AndroidjavaObject 就是当前?UnityPlayerActivity?的对象,拿到它的对象后调用jo.Call()参数表示调用?UnityPlayerActivity?类中的方法名称。


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

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


?


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



转载于:https://www.cnblogs.com/newcaoguo/p/5899233.html



友情链接: