Unity ios and android

Android

This section of the User Manual contains documentation on developing for the Android platform,

Environment setup

Before you can run code on your Android device or an Android emulator, you must set up Unity to support Android development. See Android environment setup.

If you don’t install one or more necessary components during initial setup, Unity prompts you to download missing components when you try to build a Project for Android.

Building your app

Unity lets you configure build and runtime settings for your app. See Building apps for Android.

If you have a Unity Pro subscription, you can customize the splash screen that displays when the game launches. See Customizing an Android splash screen.

Scripting

Unity provides scripting APIs that allow you to access input data and other settings from Android devices. See Android scripting.

You can use plug-ins A set of code created outside of Unity that creates functionality in Unity. There are two kinds of plug-ins you can use in Unity: Managed plug-ins (managed .NET assemblies created with tools like Visual Studio) and Native plug-ins (platform-specific native code libraries). More info
See in Glossary to call Android functions written in C/ C++ directly from C# scripts A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary . You can also call Java functions indirectly. See Building and using plug-ins for Android.

Optimization

Unity includes support for occlusion culling A feature that disables rendering of objects when they are not currently seen by the camera because they are obscured (occluded) by other objects. More info
See in Glossary , which disables rendering The process of drawing graphics to the screen (or to a render texture). By default, the main camera in Unity renders its view to the screen. More info
See in Glossary of objects when they’re not currently seen by the camera A component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary because they’re obscured (occluded) by other objects. This is a valuable optimization method for mobile platforms. See Occlusion culling.

Troubleshooting and bug reports

The Android troubleshooting guide helps you discover the cause of bugs as quickly as possible. If, after consulting the guide, you suspect the problem is being caused by Unity, file a bug report following the Unity bug reporting guidelines.

Texture compression

Ericsson Texture Compression 3D Graphics hardware requires Textures to be compressed in specialized formats which are optimized for fast Texture sampling. More info
See in Glossary (ETC) is the standard texture compression A method of storing data that reduces the amount of storage space it requires. See Texture Compression, Animation Compression, Audio Compression, Build Compression.
See in Glossary format on Android.

ETC1 is supported on all current Android devices, but it does not support textures that have an alpha channel. ETC2 is supported on all Android devices that support OpenGL ES 3.0. It provides improved quality for RGB textures, and also supports textures with an alpha channel.

By default, Unity uses ETC1 for compressed RGB textures and ETC2 for compressed RGBA textures. If ETC2 is not supported by an Android device, the texture is decompressed at run time. This has an impact on memory usage, and also affects rendering speed.

Читайте также:  Family farm для андроида

DXT, PVRTC, ATC, and ASTC are all support textures with an alpha channel. These formats also support higher compression rates and/or better image quality, but they are only supported on a subset of Android devices.

It is possible to create separate Android distribution archives (.apk) for each of these formats and let the Android Market’s filtering system select the correct archives for different devices.

Movie/Video playback

We recommend you use the Video Player to play video files. This supersedes the earlier Movie Texture feature.

Known video compatibility issues

Not all devices support resolutions greater than 640 × 360. Runtime checks verify device support and don’t play the movie if there’s a failure.

For Android Lollipop (5.0 and 5.1.1) and above, you can use any resolution or number of audio channels, provided the target device supports them.

Unity supports playback from asset bundles for uncompressed bundles, read directly from disk.

Playback support for compressed asset bundles is available for Android 9 and later.

Format compatibility issues are reported in the adb logcat output and are always prefixed with AndroidVideoMedia .

Watch for device-specific error messages located near the error messages in Unity: they’re not available to the engine, but often explain what the compatibility issue is.

Источник

Связываем две мобильные платформы в едином коде на Unity

Для Unity-разработчиков уже привычно управление игровыми потоками и сервисами на таких платформах, как iOS и Android. Однако после того, как в экосистеме появились мобильные сервисы Huawei, теперь нужно поддерживать и еще одну версию игры, если вы хотите охватить игроков, у которых есть девайсы этой фирмы.

Эта статья — как раз о том, как минимальными усилиями управлять зависимостями между несколькими мобильными сервисами Android и Huawei в одной кодовой базе.


Рисунок 1. Разница между поддержкой разных платформ и мобильных сервисов

Как видно на рисунке выше, мобильные телефоны Huawei используют операционную систему Android, так что и ваш Unity-проект должен использовать ее же при сборке для девайсов этой фирмы. Однако теперь вам нужно разработать 2 разных APK на Android или же отдельный пакет для Huawei AppGallery.

В чем разница между этими APK?

Первое и главное различие — мобильные сервисы. Речь идет о таких сервисах, как внутриигровые покупки, реклама, игровые сервисы, аналитика и т. д. Вы не можете использовать GMS в мобильных устройствах Huawei. Из-за этого возникает необходимость в создании двух APK: для релиза в Huawei AppGallery и в Google Play.

Второе не менее важное отличие — имя пакета. Поскольку обе экосистемы работают на Android, чтобы избежать несогласованности и переопределения, в Huawei App Gallery заведено правило: имя вашего пакета должно заканчиваться на .huawei или .HUAWEI. Такой подход используется для отделения сборок для Huawei от всех остальных девайсов на Android.

Но не волнуйтесь: мы можем справиться с этими различиями в одной кодовой базе.

Расскажем о двух небольших приемах, которые помогут решить эти проблемы.

1. Вы когда-нибудь слышали о #defines?

Благодаря определениям (defines) мы можем управлять нашими потоками во время сборки, а благодаря единой среде разработки — и во время кодирования.

О каких потоках речь?

Представьте, что вам нужно оперировать двумя видами игровых сервисов: Google Play и Huawei. Чтобы создать для них приложение в одном коде, можно разделить его при помощи определений (defines). Рассмотрим небольшой пример:

Если вы добавите ключевое слово «HMS_BUILD» в ваш список определений, игра вызовет HMSGameServiceProvider. Так мы сможем управлять нашими потоками в одном коде.

Читайте также:  Dedsec live wallpaper android

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

2. Скрипты до и после сборки (pre-build и post-build)

Итак, как уже упоминалось ранее, нам нужно изменить имя пакета нашей игры для версии Huawei AppGallery.

Однако, если вы в то же время используете сервисы Google Play, все конфигурации будут привязаны к вашему существующему имени пакета, и его изменение повлияет на конфигурацию. Кроме того, редактор Unity во всплывающем окне будет из раза в раз предупреждать вас об исправлении имени пакета приложения, ведь теперь имя пакета и конфигурация мобильного сервиса отличаются. Закрывать это всплывающее окно снова и снова очень утомительно.

Чтобы решить эту проблему и управлять двумя разными именами пакетов одновременно, можно использовать обходной путь с помощью pre-build и post-build сценариев с определениями.

Взгляните на этот код:

Как видите, все просто. С помощью определений мы можем изменить имя пакета во время pre-build только для HMS_BUILD. Затем после сборки можно снова вернуть имя пакета к исходному, и тогда Unity больше не будет предупреждать нас о несовпадении имени пакета.

Вот и все. Теперь мы готовы разрабатывать игру в одном коде для Huawei и Google Play одновременно.

Пример разработки приложения

Создадим приложение в одной кодовой базе для Android и Huawei, включающее в себя игровые сервисы, внутриигровые покупки и рекламу.

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

Структура сервисных модулей


Рисунок 2. Схема работы сервисных модулей

Для каждого сервиса у нас будут свои;

  • Менеджер (Manager): этот класс включает в себя игровую логику для сервисов и управляет общими функциональностями. Для разных игр может потребоваться изменение этого класса в соответствии со своими требованиями.
  • Фабричный класс (Factory): этот класс включает в себя логику выбора провайдера. В нашем подходе мы будем использовать определения, но вы можете изменить механизм выбора провайдера на свой вкус.
  • Провайдер (Provider): для каждого сервиса нам нужно создать свой провайдер. Все зависимости между вашим проектом и мобильными сервисами должны оставаться в рамках этого класса.
  • Интерфейс провайдера (Provider Interface): для унификации использования различных мобильных сервисов нам нужны общие провайдеры, и с этой целью заводятся интерфейсы провайдеров. В соответствии с требованиями вашей игры вам нужно определить все методы, которые вы будете использовать в своей игре из мобильных сервисов.

При необходимости можно еще включить:

  • Общие сущности (entities): для абстрагирования некоторых сервисов от вашей игры вам могут понадобиться общие сущности. Чтобы сохранить зависимость только от классов провайдеров, можно использовать общие сущности в соответствии с вашими требованиями.
  • Общих слушателей (listeners): аналогично общим сущностям, если вам нужны общие слушатели, вы можете создать и их.


Рисунок 3. Пример структуры для модуля игрового сервиса

Теперь давайте рассмотрим примеры и попытаемся понять, что мы можем сделать с помощью описанного в статье метода.

Чтобы абстрагировать мобильные сервисы от игровой логики, мы будем использовать менеджеров. Менеджеры связываются с провайдерами через fabrics. Таким образом, мы можем использовать провайдеров как плагины. Им необходимо реализовать общий интерфейс, содержащий методы, к которым мы хотим получить доступ.

Затем нам понадобится хотя бы один провайдер, реализующий интерфейс сервиса. Как уже говорилось ранее, все зависимости между игрой и сторонними мобильными сервисами должны оставаться в пределах этого класса. Создадим два провайдера: для Huawei и Google Play.

Приведем примеры кода. Их вы можете найти в проекте на GitHub в конце статьи.

Huawei Game Service Provider

Google Game Service Provider

Теперь нам нужно создать менеджер и класс factory. Тогда мы получим провайдера в соответствии с нашим определением.

Так выглядит наш класс factory:

Читайте также:  По для андроид для улучшения вай фай

Вот и все: теперь у нас есть класс GameManager, который может управлять функциями игрового сервиса с несколькими провайдерами.

Чтобы инициализировать GameServices, используем приведенные ниже строки кода там, где это нужно:

Не будем вдаваться в работу каждого сервисного модуля, поскольку все они имеют одинаковую логику и структуру. Посмотреть на них в деле можно, скопировав код из проекта на GitHub.

Кроме того, если вам нужно руководство по настройке плагина Huawei в Unity, это описано в данном посте.

Перейдем к выводам.

С помощью изменения определений между HMS_BUILD и GMS_BUILD в DefineConfig.cs:

  1. мы можем получить два разных APK или пакета для Huawei AppGallery и Google Play;
  2. между HMS и GMS меняются функции входа и выхода (Login&Logout), доски лидеров, достижения, внутриигровые покупки.

Ниже приведены короткие видеозаписи обеих сборок.

В случае «HMS_BUILD»:

В случае «GMS_BUILD»:

Демо-проект и подготовленные APK для HMS и GMS можно найти по ссылке на GitHub.

Источник

Возможности, созданные для мобильных устройств

Unity создана для разработки впечатляющих, производительных игр для всех мобильных устройств. Создайте игру, найдите аудиторию и развивайте бизнес в области мобильной разработки.

Тесные партнерские отношения Unity с разработчиками ведущих мобильных платформ, включая специальные инструменты для iOS и Android, обеспечат вам доступ к самым современным решениям для достижения успеха.

Больше, чем просто движок

Unity предлагает инструменты, которые обеспечат вам успех на каждом этапе разработки.

Universal Render Pipeline

Universal Render Pipeline (URP) — это оптимальное решение, которое дает высокое качество графики, производительность и масштабируемость для максимального охвата устройств и аудитории.

Это мощная готовая система рендеринга с полным набором инструментов разработки 3D-, 2D-, VR- или AR-проектов для художников.

Нативные 2D-инструменты

Unity предлагает вам продвинутые 2D-инструменты для разработки красивейших двумерных миров. Удобный и эффективный интерфейс помогает каждому сотруднику вашей студии — от художников и дизайнеров до аниматоров и инженеров — достигать новых высот.

Unity как библиотека

Реализуйте разные возможности на базе Unity, включая AR, 2D/3D-рендеринг в реальном времени, двумерные мини-игры и многое другое, непосредственно в ваших нативных мобильных приложениях.

Адресная система ассетов

Эта технологичная система ускоряет, разработку, сборку и загрузку игрового контента. Благодаря адресной загрузке снижается ресурсоемкость системы управления ассетами и упрощается создание и развертывание контентных обновлений. Кроме того, ускоряется итерация, позволяя студиям лучше оттачивать и тестировать свои проекты, повышая качество и производительность своих игр.

Визуальное программирование

Благодаря инструменту Bolt визуальное программирование в Unity позволяет любому сотруднику студии реализовать логику с помощью перетаскивания узлов вместо ручного ввода программного кода. Художники и дизайнеры смогут делать больше, не прибегая к помощи программистов, а программисты смогут быстрее прорабатывать идеи и прототипы.

AR Foundation

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

Инструменты оптимизации для мобильных платформ

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

Решения для монетизации

Системы монетизации и другие инструменты Unity помогают превратить вашу игру в доходный бизнес. Узнайте, как увеличить доходность рекламы и встроенных покупок, сохранив превосходное качество игры.

Unity Analytics

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

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

Источник

Оцените статью