Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Кроссплатформенность

Большая часть API Unity и структура проекта идентичны для всех поддерживаемых платформ, и иногда проект можно перестроить для работы на разных устройствах. Однако фундаментальные различия в оборудовании и методах развертывания означают, что части проекта могут не переноситься между платформами без изменений. На этой странице перечислены некоторые распространенные кроссплатформенные проблемы и предложения по их решению.

Ввод

Лучшим примером различий в поведении между платформами являются методы ввода, предлагаемые оборудованием.

Клавиатура и джойстик

Функция Input.GetAxis удобна на настольных платформах для объединения ввода с клавиатуры и джойстика. Эта функция не подходит для мобильных платформ, использующих сенсорный ввод. Стандартный ввод с настольной клавиатуры подходит только для переноса печатного текста на мобильные устройства. Вы можете добавить уровень абстракции к своему входному коду, если в будущем планируете перенос на другие платформы. Например, если вы создаете автомобильную игру, вы можете создать свой собственный класс ввода и обернуть вызовы API Unity в свои собственные функции:

// Returns values in the range -1.0 .. +1.0 (== left .. right). function Steering() { return Input.GetAxis("Horizontal"); } // Returns values in the range -1.0 .. +1.0 (== accel .. brake). function Acceleration() { return Input.GetAxis("Vertical"); } var currentGear: int; // Returns an integer corresponding to the selected gear. function Gears() { if (Input.GetKeyDown("p")) currentGear++; else if (Input.GetKeyDown("l")) currentGear--; return currentGear; }

При объединении вызовов API в класс они помещаются в один исходный файл и упрощают поиск и замену вызовов. Вы должны проектировать свои входные функции в соответствии с логическим значением входных данных в вашей игре. Это помогает изолировать остальную часть игрового кода от конкретного метода ввода, используемого на конкретной платформе.

Например, вы можете изменить описанную выше функцию Gears, чтобы фактический ввод данных осуществлялся при касании экрана мобильного устройства. Вы можете использовать целое число для представления выбранного механизма, работающего для всех платформ, но если вы смешаете вызовы API для конкретной платформы с остальной частью кода, вы можете вызвать проблемы. Вы также можете использовать компиляцию, зависящую от платформы, чтобы объединить различные реализации входных функций в одном и том же исходном файле и избежать ручной замены.

Касания и клики

Функции Input.GetMouseButtonXXX предназначены для понятной интерпретации на мобильных устройствах. Экран сообщает о простом касании как о щелчке левой кнопкой мыши, а свойство Input.mousePosition указывает положение касания, пока палец касается экрана. Игры с простым взаимодействием с мышью часто могут работать прозрачно между настольными и мобильными платформами.

Конверсия зачастую гораздо менее проста. Например, настольная игра может использовать более одной кнопки мыши, а мобильная игра может обнаруживать несколько касаний экрана одновременно. Чтобы справиться с этим, вы можете представлять входные данные логическими значениями, которые затем используются остальной частью игрового кода.

Например, вы можете заменить жест сжатия для увеличения на мобильном устройстве нажатием клавиши +/- на рабочем столе; функция ввода может возвращать значение с плавающей запятой, указывающее коэффициент масштабирования. Точно так же можно было бы использовать касание двумя пальцами на мобильном телефоне вместо щелчка правой кнопкой мыши на рабочем столе. Однако, если свойства устройства ввода являются неотъемлемой частью игры, то их переделка на другой платформе может оказаться невозможной. Это может означать, что вы не можете портировать игру или вам необходимо значительно изменить ввод или игровой процесс.

Акселерометр, компас, гироскоп и GPS

Эти входные данные связаны с мобильностью портативных устройств и поэтому могут не иметь значимого эквивалента на настольных компьютерах. Однако некоторые варианты использования просто отражают стандартные игровые элементы управления и легко портируются. Например, в игре про вождение может быть реализовано управление рулем по наклону мобильного устройства (определяется акселерометром). В таких случаях входные вызовы API обычно легко изменить, поэтому вы можете заменить входные данные акселерометра нажатиями клавиш.

Однако может потребоваться повторная калибровка ввода или изменение сложности игры, чтобы приспособиться к другому методу ввода. Наклон устройства медленнее и требует больше усилий, чем нажатие клавиш, что затрудняет концентрацию на дисплее. Это может затруднить освоение игры на мобильном устройстве, поэтому может быть уместно замедлить игровой процесс или выделить больше времени на уровень. Это требует разработки игрового кода для корректировки этих факторов.

Память, хранилище и производительность процессора

Мобильные устройства имеют меньше места для хранения, памяти и мощности процессора, чем настольные компьютеры, поэтому игру может быть сложно перенести просто потому, что ее производительность неприемлема для менее мощного оборудования. Если вы выходите за пределы своего настольного оборудования, то игра, вероятно, не является хорошим кандидатом для переноса на мобильную платформу.

Требования к хранилищу

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

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

Автоматическое управление памятью

Unity автоматически восстанавливает неиспользуемую память из «мертвых» объектов, и на настольных компьютерах это часто происходит незаметно. Однако меньшая мощность памяти и ЦП на мобильных устройствах означает, что сборка мусора может происходить чаще, что влияет на производительность и вызывает нежелательные паузы в игровом процессе. Даже если игра работает в доступной памяти, может потребоваться оптимизация кода, чтобы избежать пауз при сборке мусора.

Дополнительную информацию см. на странице управления памятью.

Мощность процессора

Игра, которая хорошо работает на настольном компьютере, может иметь низкую частоту кадров на мобильном устройстве, потому что мобильный процессор не справляется со сложностью игры. Обратите внимание на эффективность кода при переносе проекта на мобильную платформу.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3