Плагин Android в Юнити.

Nov 09, 2016 09:15

Ранее я писал о проблеме которая у меня возникла связанна с тем что при сворачивании приложения отключался Coroutine.

Итак я сейчас расскажу свое видение возможно неверное.

Итак мой плагин с помощью AlertDialog показывает этот самый андроидовский диалог.
Если показываем диалог - то в Unity приходит событие OnAppFocus:false
Если сворачиваем диалог - то в Unity приходит событие OnAppFocus:true

Все логично и понятно.

Если сворачиваю приложение - то в Unity приходит событие onAppPause:true
Если восстанавливаю приложение - то в Unity приходит событие onAppPause:false

Тоже никаких вопросов.

Но если у меня открыт диалог (AlertDialog) и я сворачиваю приложение то оба эти события я ловлю успешно.
А если после этого восстанавливаем приложение - то видим на экране диалог(AlertDialog) и под ним нашу игру. Но ни одно из событий не приходит, ни OnAppPause и OnAppFocus, и более того - Coroutine не работает, и не вызывается даже Update.
Если на диалоге нажать кнопку Cancel допустим, диалог закрывается, и нам разом в приложение приходят события как положено OnAppPause:false и OnAppFocus:true, Update начинает работать.

Я решил эту проблему. Я подумал что раз не работает Update значит основной поток приложение не активен. Я в андроиде стал смотреть что происходит когда возобновляем приложение, у меня класс UnityActivityWrapper extends UnityPlayerActivity, переопределил метод onResume().

По умолчанию в данном методе вызывается this.mUnityPlayer.resume()
Я дополнительно вызываю метод this.mUnityPlayer.windowFocusChanged(true);

В результате все события приходят как следует, диалог виден вверху, а под ним наше Unity приложение, и у него работает Update - ну т.е. все ровно так же как было до сворачивания приложения центральной кнопкой (на некоторых телефонах не обязательно сворачивать, проблема воспроизводится от входящей СМС например).

Я предполагаю что windowFocusChanged возобновляет выполнение основного потока.

Если есть вопросы или советы - готов пообсуждать. Могу сделать простой мастер-класс как делать плагины для Юнити.
Previous post Next post
Up