Событие OnQuit в приложении Oculus Go, созданное в Unity?

#c# #unity3d #oculusgo

#c# #unity3d #oculusgo

Вопрос:

Я работаю над приложением Oculus Go в Unity и обнаружил, что выход из приложения в гарнитуре не вызывает onApplicationQuit() . Кто-нибудь знает хорошее решение для этого? Мне действительно нужен какой-то код, который выполняется только при закрытии приложения.

Я пытался использовать OnDestroy() в качестве обходного пути, но оно также не вызывается, когда приложение закрыто. OnPaused() вызывается при входе в диалоговое окно Oculus, в котором запрашивается, хотите ли вы выйти, а не при фактическом выборе выхода.

Комментарии:

1. В качестве обходного пути вы всегда можете выйти из приложения из Unity, используя Application.Quit(); .. than вы могли бы реализовать свою логику прямо перед этим (или, я думаю, также onApplicatiomQuit будет вызвано).

2. Я не знаю, как работает Oculus, но, возможно, это то же самое, что для iOS и вам нужно проверить Exit on suspend ( OnApplicationQuit )?

3. Обратите внимание, что даже сам SteamVR_Plugin использует OnApplicationQuit , поэтому кажется странным, что он не вызывается

4. На самом деле я не использую SteamVR, только утилиты Oculus для Unity. Выход при приостановке, похоже, возможен только в iOS. Я мог бы предоставить пользователю другой способ выхода из приложения, но, насколько я знаю, нет способа отключить кнопку home, которая выводит вас в диалоговое окно выхода, чтобы пользователи все еще могли ее использовать. Это может вызвать проблему, потому что приложение загружает большие файлы из Интернета, и что мне нужно сделать при выходе, так это завершить все загрузки, которые выполняются, и удалить файлы. Если приложение существует без этого, вы застреваете с наполовину загруженными, не воспроизводимыми видеофайлами.

5. @derHugo Oculus работает на Android, так что Exit on suspend это не вариант. 🙁

Ответ №1:

Как вы уже заявили, OnApplicationQuit() фактически никогда не вызывается при выходе из приложения на ходу из меню Oculus. Вместо этого приложение переводится в приостановленное состояние, для которого мало что можно сделать. Помимо подключения к машинному коду или какому-либо плагину 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() метод.

Приветствия.

Ответ №2:

Если вы разрабатываете и публикуете для Oculus GO, вам нужно будет использовать их Unity SDK, который, в свою очередь, предоставляет функцию для правильного выхода из приложения.

Я предполагаю, что вы не можете использовать OnApplicationQuit, потому что в требовании Oculus Go кнопка «Назад» должна использоваться только для возврата пользователя в главное меню Oculus Go.

Во-первых, вам нужно убедиться, что в вашем проекте есть OVRmanager, который вы получаете, загружая и импортируя Unity SDK с веб-сайта разработчика Oculus.

Затем используйте приведенный ниже скрипт для выхода из приложения, и он отправит вас обратно в главное меню Oculus Go, когда вы нажмете кнопку «Назад» на контроллере.

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

Комментарии:

1. Нажатие главной кнопки oculus уже выполняет это по умолчанию. Проблема в том, что выход из этого способа никогда не вызывает OnApplicationQuit() метод в приложении.

2. Это было основано на руководстве по Unity и на том, как они рекомендуют его закрыть. Отлично работает в моем приложении, которое опубликовано в Oculus Store. Извините, что я не смог вам больше помочь