2

我正在 Unity 中开发 Oculus Go 应用程序,发现在耳机中退出应用程序不会调用onApplicationQuit(). 有谁知道一个很好的解决方法?我真的需要一些只在应用程序关闭时执行的代码。

我尝试将OnDestroy()其用作解决方法,但在关闭应用程序时也不会调用它。OnPaused()当您进入询问您是否要退出的 Oculus 对话框时调用,而不是在您实际选择退出时调用。

4

2 回答 2

0

正如您已经说过的,OnApplicationQuit()从 Oculus 菜单退出 Go 上的应用程序时从未真正调用过。相反,应用程序被置于暂停状态,对此几乎无能为力。除了挂钩到本机代码或一些 android java 插件(其中的细节不是我的强项)之外,没有太多已知的解决方法。

部分原因是因为解决方法确实取决于应用程序的需求,保存状态或PlayerPrefs可以在OnApplicationPause()方法中完成。

private void OnApplicationPause(bool isPaused)
{
    if (isPaused) {
        // ..
        PlayerPrefs.Save();
    }    
}

对于单人游戏/用户游戏/应用程序,这可能是最简单的解决方案。对于多人游戏,您可以订阅 OVR 的连接状态更改事件并处理刚刚从反面退出的用户:

using Oculus.Platform;
using Oculus.Platform.Models;
// ...

Net.SetConnectionStateChangedCallback((Message<NetworkingPeer> message) => {
    if (message.Data.State == PeerConnectionState.Closed) {
        Debug.Log("The user MOST LIKELY quit the app.");
    }
});

不是一个完美的解决方案,但由于 OVR 没有在他们的文档中提供任何内容,并且他们没有在他们的论坛中回答有关此主题的问题,因此这是一个足够体面的解决方法。

唯一的其他选择是鼓励用户从您的应用程序中单击某种“退出”按钮,该按钮调用UnityEngine.Application.Quit()确实会调用该OnApplicationQuit()方法。

干杯。

于 2019-09-13T19:23:11.077 回答
-1

如果您正在为 Oculus GO 开发和发布,那么您将需要使用他们的 Unity SDK,后者提供了正确退出应用程序的功能。

我猜您不能使用 OnApplicationQuit,因为在 Oculus Go 要求中,后退按钮只能用于将用户返回到 Oculus Go 主菜单。

首先,您需要确保您的项目中有 OVRmanager,您可以从 Oculus 开发者网站下载并导入 Unity SDK。

然后使用下面的脚本退出应用程序,当您按下控制器上的返回按钮时,它会将您带回 Oculus Go 主菜单。

if (OVRInput.GetDown(OVRInput.Button.Back)
{
  OVRManager.PlatformUIConfirmQuit();
}
于 2019-05-06T21:43:13.090 回答