我遇到与本主题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返回到详细信息视图。
有没有人知道如何实现这个目标?
谢谢!
答案 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();
它完美地为我工作