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返回到详细信息视图.
有谁知道如何实现这一目标?
谢谢!
小智 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 和其他一些东西。
将以下内容添加到清单文件后:
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() 中添加自己的代码。
我目前正在开发一个涉及 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 模型时使用。
| 归档时间: |
|
| 查看次数: |
5390 次 |
| 最近记录: |