Unity制作的Oculus Go应用中的OnQuit事件?

时间:2019-04-09 03:51:35

标签: c# unity3d oculusgo

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

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

2 个答案:

答案 0 :(得分:0)

如果您正在为Oculus GO开发和发布,那么您将需要使用其Unity SDK,这反过来提供了正确退出应用程序的功能。

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

首先,您需要通过从Oculus Developer网站下载并导入Unity SDK,确保在项目中拥有OVRmanager。

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

if (OVRInput.GetDown(OVRInput.Button.Back)
{
  OVRManager.PlatformUIConfirmQuit();
}

答案 1 :(得分:0)

正如您已经说过的那样,从Oculus菜单上退出Go上的应用程序时,实际上从未调用OnApplicationQuit()。相反,该应用被置于暂停状态,对此您几乎无能为力。除了迷上本机代码或某些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没有在文档中提供任何内容,并且他们没有在论坛中回答有关此主题的问题,因此这是一个不错的解决方法。 / p>

唯一的另一种选择是鼓励用户从您的应用程序内单击某种“退出”按钮,该按钮会调用UnityEngine.Application.Quit(),这实际上会调用OnApplicationQuit()方法

干杯。