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

Sol*_*any 6 navigation android back-button unity-game-engine android-fragments

遇到与本主题中提到的相同的问题将Unity与Eclipse集成:后退按钮单击但建议的解决方案不起作用.

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

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

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

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

谢谢!

小智 6

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


小智 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>
Run Code Online (Sandbox Code Playgroud)

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

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


She*_*kar 5

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

android:launchMode="singleTask"
    android:process=":unityplayer"
Run Code Online (Sandbox Code Playgroud)

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

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

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


Jak*_*keP 1

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

据我所知,这不是 Fragments 的错 - 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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


编辑:

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

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