#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. Извините, что я не смог вам больше помочь