• 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。

  • 相关阅读:
    在DataList控件中删除数据记录
    java中进行二进制,八进制,十六进制,十进制间进行相互转换
    Java中重载重写
    WCF 第七章 寄宿 在Windows 进程激活服务中寄宿服务
    .NET 中的十进制浮点类型(译文)
    .NET 中的二进制浮点类型(译文)
    WCF 第六章 序列化和编码 总结
    WCF 第六章 序列化和编码 为自定义序列化使用XmlSerializer
    WCF 第七章 寄宿 在IIS7中寄宿服务
    WCF 第七章 寄宿
  • 原文地址:https://www.cnblogs.com/dsh20134584/p/7907837.html
Copyright © 2020-2023  润新知