8

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

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

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

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

有谁知道如何实现这一目标?

谢谢!

4

5 回答 5

7

当您在统一活动中向后按下时,整个过程将被终止。因此,当您通过 android 活动启动统一活动时,请在不同进程中启动统一活动。您可以通过在项目的 android 清单文件中声明它来做到这一点。

于 2014-09-25T05:46:25.000 回答
5

您应该在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 进程。

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

于 2016-12-02T11:03:44.180 回答
4

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

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() 中添加自己的代码。

于 2018-04-05T07:26:38.837 回答
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 项目中实施一个解决方案,以帮助处理后退按钮按下操作。

我这样做了,然后进行了一些更多的测试,看起来onBackPressed()当 UnityPlayer 对象没有暂停时,该方法可以正常调用。这让我相信,该UnityPlayer.pause()方法只应在您的应用程序置于后台时使用,而不是在您在给定时间根本不需要 Unity 模型时使用。

于 2014-02-06T12:54:39.800 回答
0

// 只需在您的 Unity 模块清单中添加以下两行代码。UnityPlayerActivity下

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

和 Unity 后退按钮单击事件将其添加到代码 Application.quit();

它完美地为我工作

于 2017-07-13T07:03:12.317 回答