Юнити и монобровь Андроида (моноглаз туда же)

Я уже заметила, что названия моих тем косят под названия книг с Гарри Поттером :slight_smile:

В общем, надо сделать так, чтоб игра на телефонах с монобровью имела адекватный вид. То бишь, чтоб функционировала на весь экран, а какие-то определенные элементы (кнопочки, тексты) располагались исключительно в области, где моноброви нет. Так как по правилам нельзя без перепитий, то просто так переставить по-другому интерфейс нельзя. Надо взять игру, отделить все ее компоненты от фона и на моноглазных и монобровных телефонах делать так, чтобы они существовали исключительно в safeArea.

В Юнити (у меня 2019.2.21f1) есть некоторые функции. Например, Screen.safeArea и Screen.cutouts.

Делала я все по вот этому туториалу:

Проблема в том, что safeArea вроде бы правильно определяется (ну то есть она пикселей на 250-300 меньше, чем сам экран), но ее расположение начинается с координаты (0;0). Хотя ведь должно вроде как по y быть на размер моноброви ниже?

Screen.cutouts вообще не видят ни моноброви, ни моноглаза. Этот массив остается пустым.

Хотя если в Юнити убрать галочку, которая разрешает игре быть во весь экран и плевать на safeArea, то игра четко становится в размер safeArea. Но, увы, черные полоски сверху и снизу игры моему заказчику не нужны.

К слову, монобровь - программная, то бишь включенная средствами 9-го Андроида. А вот моноглаз был вполне настоящий. Но координаты и размеры обоих Юнити в упор не видит.

Причем я так понимаю, что проблема только у меня, потому что в интернете куча примеров кода, наподобие того, что выше - и у всех все работает.

Если вдруг кто каким-то чудом что-то знает в этой области, помогите, плиз…

Тут вроде бы жалуются на что-то похожее https://forum.unity.com/threads/weird-screen-safearea-behavior-on-android.701600/

И ответ, что так и должно быть, в 2018 был баг. Но я чот не очень понял ответ :crazy_face:

The Screen.safeArea values are returned in screen space ( origin(0,0) is at left bottom corner), so you are getting y=0 because that is the offset from bottom of the screen and the notch is at the top of the screen.

the 2018.3.14 had a bug where it was returning Screen.safeArea values in UI space ( origin(0,0) at left top corner).

Тут вроде бы более свежая версия туториала, чем на хабре, но по-моему в коде ничего важного не поменялось.
https://connect.unity.com/p/updating-your-gui-for-the-iphone-x-and-other-notched-devices

Тут написано

Note that to use the full safe area on Android, the following setting must be checked: Edit/Project Settings - Android tab - Resolution and Presentation/Render outside safe area = true. If set to false, your app will render the cutout as a black bar.

и в примере показано, что тогда полосок нет. И если false, то только с одной стороны.

Спасибо, буду завтра разбираться.

Да, есть у меня эта галочка, и вот про нее я писала. Стоит она - приложение на весь экран, не стоит - приложение дает место монобровям и моно-всему-прочему. Я о том, что Юнити-то видит эти моноштуки через галочку, но не видит их через код.

В общем, помогло вот это вот видео:

Вроде как помогло. По крайней мере, теперь нормально определяет моноглаз и программную монобровь на Андроиде. Оказывается, надо было еще ловить изменение сейфАреи на активации канваса.