如何从Unity Player返回到之前运行的Android Activity?

时间:2013-09-29 16:37:27

标签: android android-fragments navigation unity3d back-button

我遇到与本主题Integrating Unity with Eclipse: Back Button Click中提到的问题相同的问题,但建议的解决方案不起作用。

我在原生Android应用程序中嵌入了Unity Player。我可以毫无问题地启动Unity播放器但现在我想使用后退按钮返回到我之前的活动。我已经从Unity端尝试了Application.Quit,从android端尝试了finish(),两者都关闭了整个应用程序。我也尝试从Unity上下文启动一个新的Activity,但这也不起作用,我认为这是因为我使用片段。我的活动设置如下:

MainActivity,其中嵌入了多个片段。其中两个包含列表,我可以从中创建一个新的Activity,它显示了List元素的详细视图。详细视图也是片段,您可以在其中向左和向右滑动到上一个/下一个元素(类似于gmail应用程序)。在详细信息视图中,您可以启动Unity以使用qualcomm vuforia框架进行一些扩充。

到目前为止一切正常,但我无法从UnityPlayer返回到详细信息视图。

有没有人知道如何实现这个目标?

谢谢!

5 个答案:

答案 0 :(得分:6)

当你在团结活动中反击时,整个过程将被杀死。因此,当您通过Android活动开始统一活动时,在不同的过程中启动统一活动。你可以通过在项目的android清单文件中声明这个来做到这一点。

答案 1 :(得分:3)

您应该为 AndroidManifest.xml 添加UnityActivity.java的下一行代码:

    <activity
        android:name=".ui.activities.UnityPlayerActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"  <-- THIS
        android:process=":unityplayer"   <-- AND THIS
        ...    
    >
        ...
    </activity>

它将像另一个进程和Unity命令一样运行UnityActivity: Application.quit(); 将仅关闭Unity Process。

此外,如果它还不够,您可以将这些行添加到启动UnityActivyty的活动中。但要小心,另一个包活动最多会提供自己的sharedPreferences和其他一些东西。

答案 2 :(得分:1)

我正在开发一个涉及Unity3d片段的Android项目,看起来我遇到了类似的问题。

据我所知,这不是碎片的错 - 这是Unity做了一些有趣的事情,比如拦截后退按钮事件。我所做的是覆盖以下方法,以确定按下后退按钮时发生了什么:

@Override
public void onBackPressed() {

    Log.e("Test", "onBackPressed here");
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    Log.e("Test", "onKeyDown here");

    if (keyCode == KeyEvent.KEYCODE_BACK) {

    Log.e("Test", "onKeyDown was back button");
    }

    return super.onKeyDown(keyCode, event);
}

我发现的问题是,当我按下后退按钮时,有时候没有显示日志消息 - 即它实际上没有注册。起初我认为这与我在onResume()方法中调用UnityPlayer.pause()有关,但是当我今天早上再次运行项目时,结果表明问题仍然存在,并且它是间歇性的。

如果我想出一个解决方案,我会在这个帖子中编辑我的帖子。我希望这个解释至少有一些帮助。


编辑:

看一下这个链接:Can't pass back event from Unity to android library jar。那里有一个解决方案,您可以在Unity项目中实现,以帮助处理后退按钮处理。

我做了那个然后进行了一些测试,当UnityPlayer对象 NOT 暂停时,看起来onBackPressed()方法被调用了。这使我相信UnityPlayer.pause()方法只应在您的应用程序放在后台时使用,而不是在您不需要在给定时间使用Unity模型时使用。

答案 3 :(得分:1)

将以下内容添加到您的清单文件后:

android:launchMode="singleTask"
    android:process=":unityplayer"

另外,请确保在UnityPlayerActivity中修改以下方法,如下所示:

    @Override public boolean onKeyDown(int keyCode, KeyEvent event)   {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        onBackPressed();
    }return mUnityPlayer.injectEvent(event);
    }

您可以在onBackPressed()中添加自己的代码。

答案 4 :(得分:0)

//在Unity模块中添加以下两行代码。 在UnityPlayerActivity下

        android:launchMode="singleTask"
        android:process=":unityplayer"

Unity后退按钮点击事件添加以下代码 Application.quit();

它完美地为我工作