Несоответствие ориентации экрана между Unity3d и iPad, игра не зависит от поворота устройства

Я помогаю разрабатывать игру в Unity3d с помощью C#. Мы разрабатываем для iPad и используем подключаемый модуль Unity для Apple. Наша игра представляет собой двухмерный платформер, в котором игровой процесс основан на вращении устройства (iPad). Мы используем физику для движения персонажа.

Игра ведется в основном в пейзажном правом. Мы можем достаточно легко изменить ориентацию устройства, используя Screen.orientation = ScreenOrientation.LandscapeRight и т. д. Мы хотим иметь возможность поворачивать устройство из LandscapeLeft и LandscapeRight в Portrait или PortraitUpsideDown, что мы и можем сделать.

При запуске нашей сцены в Unity3d, когда мы поворачиваемся от Пейзажа к Портрету, наш персонаж падает, потому что мы поворачиваем мир (то, на чем он стоит), в то время как он остается в той же ориентации (физика остается той же), что приводит к его падению. Это желаемое поведение, которое мы хотим. Однако, когда мы собираем Xcode и запускаем игру на симуляторе iPad (версия 5.1) и поворачиваем устройство так, чтобы мир вращался, оно просто вращает устройство, а игра по-прежнему имеет ту же ориентацию (пейзаж). IPad находится в портретной ориентации, однако игра по-прежнему находится в альбомной ориентации. Есть ли другие переменные, которые нам нужно установить в устройстве, помимо ScreenOrientation? Как сделать так, чтобы наше игровое состояние соответствовало ориентации устройства?

Краткое резюме: мы хотим, чтобы наша игра по умолчанию использовала альбомную ориентацию. Когда мы поворачиваемся к портрету, мы хотим, чтобы мир вращался, а камера и игрок оставались постоянными. Физика связана с персонажем, что означает, что когда мир вращается, она падает, потому что больше не стоит на земле. В настоящее время, когда мы поворачиваем iPad, ориентация устройства меняется, но ориентация игры не меняется. Мы хотим, чтобы мир менялся при вращении, но персонаж оставался постоянным. Он работает в Unity3d, но неправильно работает с симулятором Xcode iPad. как нам это сделать?

Спасибо!

Кеннет


person Kenneth    schedule 26.09.2012    source источник
comment
Является ли это врожденной функцией, позволяющей Unity определять текущую ориентацию и автоматически поворачивать мир? Мне* кажется, что вы вручную меняете сценарий с помощью элемента управления в Unity, но не запрограммировали условие, которое фактически проверяет портретную ориентацию и настраивает ее соответствующим образом. Я бы также протестировал его на реальном iPad, если вы можете. *У меня очень ограниченный опыт работы с Unity.   -  person 0_______0    schedule 26.09.2012
comment
Вы тестировали на реальном iPad? Симулятор iOS, как известно, плохо себя ведет.   -  person Jerdak    schedule 26.09.2012
comment
Может помочь, если вы покажете нам какой-нибудь код на случай, если он может быть сломан.   -  person cregox    schedule 03.10.2012


Ответы (1)


Очень запутанный вопрос, надо сказать. Проверка ориентации должна быть простой и понятной.

Прежде всего: забудьте о симуляторе XCode! Это отстой, даже если вы строите прямо на XCode и не используете Unity или что-то еще. Возможно, это само по себе уже решает вашу проблему. Возьми iPad и протестируй на нем.

Кроме того, вам потребуются скрипты для обработки физического изменения поведения при вращении. Я не мог понять, поняли ли вы это, но в случае, если вы этого не сделаете, это может быть не так уж тривиально. Хотя, кажется, ты понял.

Наконец, самая запутанная часть — это когда вы говорите о ScreenOrientation и Screen.Orientation, и, возможно, там ошибка. Когда вы используете Screen.orientation = ScreenOrientation.LandscapeRight, вы принудительно меняете фактическую ориентацию экрана (она не доступна только для чтения), и это следует делать только в целях тестирования. Вы даже можете включить весь код, относящийся к нему, в теги прекомпилятора #if UNITY_EDITOR и #endif. Для устройства у вас должно быть только ScreenOrientation == ScreenOrientation.LandscapeRight в предложениях if или switch с оператором сравнения, двойным знаком равенства (==).

Не могу придумать ничего другого, что могло бы там пойти не так.

person cregox    schedule 03.10.2012