Unity: приложение продолжает работать в фоновом режиме, хотя значение Application.runInBackground равно false

#unity3d #unity-editor

#unity3d #unity-редактор

Вопрос:

В настоящее время я разрабатываю какой-то проект Unity (это мой первый, я не знаком с Unity), и меня беспокоит то, что точки останова все еще срабатывают, когда я сворачиваю окно редактора Unity, хотя у меня есть Application.runInBackground == false , поэтому приложение должно быть приостановлено в фоновом режиме, но это не так! Только пользовательский интерфейс зависает, а музыка останавливается, пока фактический код продолжает выполняться. Итак, мне в основном интересно, является ли это общим поведением или это происходит только тогда, когда вы работаете в редакторе, чтобы разрешить отладку, а в выпуске останавливается выполнение кода сборки?

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

1. Добро пожаловать, новый пользователь — я не совсем уверен , какой эффект вы имеете в виду, но да, к сожалению, такие вещи не работают так, как вы ожидаете в редакторе . попробуйте сборку на рабочем столе?

2. Only the UI gets frozen and music stops .. вы имеете в виду, что вы нажимаете точки останова из разных потоков / асинхронных задач? Вы не можете избежать продолжения их работы! runInBackground влияет только на «основной» поток Unity.

3. Точка останова @derHugo, установленная в Update() унаследованном от MonoBehaviour , все еще срабатывает, когда приложение свернуто, и я почти уверен, что Update() это вызывается в «основном» потоке

4. Итак, чтобы убедиться, что вы сворачиваете и фактически нажимаете на другую программу на своем рабочем столе?

5. @derHugo Я нажимаю на Visual Studio, я думаю, на самом деле не имеет значения, сворачиваете ли вы приложение или нажимаете на другое, поскольку в обоих случаях редактор unity теряет фокус. Итак, я в основном запускаю приложение, затем переключаюсь на VS (когда я переключаюсь на VS, пользовательский интерфейс зависает и музыка останавливается), затем я устанавливаю точку останова, Update() и она htis

Ответ №1:

У меня были похожие проблемы. Я обнаружил, что это связано с тем, что у меня есть IDE, подключенная к Unity, и только тогда это произошло. Когда вы переключаетесь в режим выпуска, все идет так, как и должно — режим отладки в Unity.

Ответ №2:

Вы пытались изменить его в редакторе? перейдите в меню Правка -> Настройки проекта -> Проигрыватель. Теперь панель инспектора изменится, чтобы отобразить настройки проигрывателя. Найдите опцию с надписью «Запуск в фоновом режиме» и снимите с нее флажок. Из того, что я понимаю Application.runInBackground == false , больше приостанавливает его, чем останавливает выполнение скрипта. Если ваш проект предназначен для мобильных устройств (или, может быть, просто добавьте это в любом случае, это может помочь), попробуйте:

RuninBackgorund игнорируется для Android и IOS, как вы можете видеть здесь

Единственный и эффективный способ запуска в фоновом режиме на Android — через сервис. Вы можете использовать метод OnApplicationPause, чтобы получать уведомления, когда игра приостанавливается / распаковывается.

 public void OnApplicationPause(bool paused) {
if(paused) {
// Game is paused, stop service notifications.
} else {
// Game is unpaused, start service to get notifications
}
 

Здесь у вас есть хороший учебник по взаимодействию между Android и Unity