как телефон подключить к unity
Unity Remote
Unity Remote is a downloadable app designed to help with Android, iOS and tvOS development. The app connects with Unity while you are running your project in Play Mode from the Unity Editor. The visual output from the Editor is sent to the device’s screen, and the live inputs are sent back to the running project in Unity. This allows you to get a good impression of how your game really looks and handles on the target device, without the hassle of a full build for each test.
Note: For Unity Remote to work, you need to have the Android SDK on your development machine.
Unity Remote replaces the separate iOS and Android Remote apps used with earlier versions. Those older Remote apps are no longer supported.
Older versions of Unity Remote are still available for use in Legacy projects; see Legacy Unity Remote documentation for more information on these versions.
Device and Feature Support
Unity Remote currently supports Android devices (on Windows and OS X via a USB connection) and iOS devices (iPhone, iPad, iPod touch and Apple TV, through USB on OS X and Windows with iTunes).
The Game View of the running Unity project is duplicated on the device screen, but at a reduced framerate. The following input data from the device is also streamed back to the Editor:
Obtaining and Using Unity Remote
You can download Unity Remote for free in the form of a Unity project that you build yourself, or as a pre-built app from the device’s app store:
Once you’ve downloaded the app, install and run it on your device and connect the device to your computer using a USB cable.
To enable Unity to work with your device, open the Editor settings in Unity (menu: Edit > Project Settings, then select the Editor category) and select the device to use from the Unity Remote section:
Note: To specify the location of your Android SDK, go to Edit > Preferences (Windows) or Unity > Preferences (Mac).
Click the Play button in the Editor to see your game appear on the device and in the Unity game window as Unity connects to the Remote app. While the game plays, input from the device (accelerometer, etc.) is sent to your scripts as if they were running on the device itself.
Решение проблем
I have more than one device plugged in, but only one of them works with Unity
Unity Remote doesn’t support multiple connected Android devices, and to resolve this, it automatically picks the first device it finds. However, it is fine to have multiple iOS/tvOS devices and one Android device connected at the same time, since you can select which one to use from the Editor settings (menu: Edit > Project Settings, then select the Editor category).
I’m getting really poor graphics quality when running my game in Unity Remote
When you use Unity Remote the game actually runs in the Editor, while its visual content is streamed to the target device. Since the bandwidth between the Editor and the device is limited, the stream must be compressed heavily for transmission. This compression inevitably reduces the image quality.
In the Unity Remote section of the Editor window (menu: Edit > Project Settings, then select the Editor category) you can switch the compression method between JPEG and PNG. PNG compression is “lossless” (so the image quality doesn’t degrade) but uses more bandwidth than JPEG. A downsized image has lower bandwidth requirements than one at full resolution. By changing these settings, you can trade image accuracy off against framerate as necessary. When using a lower resolution, be aware that Unity Remote downsizes images for better performance.
Bear in mind that Unity Remote is only really intended to give a quick approximate check of how your game will look and feel when running on the device. Make sure that you occasionally do a full build and test the “real” app.
Ввод на мобильном устройстве
На мобильных устройствах класс Input предоставляет доступ к нажатию на экран, акселерометру и географическим/локационным данным.
Доступ к клавиатуре на мобильных устройствах обеспечивается через iOS keyboard.
Multi-Touch Screen
iPhone и iPod способны отслеживать до пяти нажатий на экран одновременно. Вы можете получить статус каждого нажатия на протяжении последнего кадра через массив Input.touches.
Android устройства не имеют определенного лимита на количество нажатий, которое можно отслеживать. Он колеблется от устройства к устройству и может варьироваться от одного-двух нажатий на старых устройствах, до пяти нажатий на некоторых новых.
Каждое нажатие пальцем представлено в структуре данных Input.Touch:
| Свойство: | Функция: |
|---|---|
| fingerId | Уникальный индекс для нажатия. |
| position | Позиция нажатия на экран. |
| deltaPosition | Изменение позиции на экране с последнего кадра. |
| deltaTime | Количество времени, которое прошло с тех пор как изменилось последнее состояние. |
| tapCount | The iPhone/iPad screen is able to distinguish quick finger taps by the user. This counter will let you know how many times the user has tapped the screen without moving a finger to the sides. Android devices do not count number of taps, this field is always 1. |
| phase | Describes so called “phase” or the state of the touch. It can help you determine if the touch just began, if user moved the finger or if they just lifted the finger. |
Фазы могут быть следующими:
| Began | Палец только что прикоснулся к экрану. |
| Moved | Палец передвинулся по экрану. |
| Stationary | Палец прикоснулся к экрану, но с последнего кадра не двигался. |
| Ended | Палец только что оторван от экрана. Это последняя фаза нажатий. |
| Canceled | The system cancelled tracking for the touch, as when (for example) the user puts the device to their face or more than five touches happened simultaneously. This is the final phase of a touch. |
Ниже приведен пример скрипта, который выпускает луч там, где пользователь тапает по экрану:
Симуляция Мыши
On top of native touch support Unity iOS/Android provides a mouse simulation. You can use mouse functionality from the standard Input class. Note that iOS/Android devices are designed to support multiple finger touch. Using the mouse functionality will support just a single finger touch. Also, finger touch on mobile devices can move from one area to another with no movement between them. Mouse simulation on mobile devices will provide movement, so is very different compared to touch input. The recommendation is to use the mouse simulation during early development but to use touch input as soon as possible.
Акселерометр
При движении мобильных устройств, встроенный акселерометр сообщает линейное ускорение изменяется вдоль трех основных осей в трехмерном пространстве. Ускорение вдоль каждой оси сообщается непосредственно аппаратным обеспечением как значение G-Force. Значение 1,0 представляет собой нагрузку около +1г вдоль заданной оси, а величина –1,0 представляет –1g. Если вы держите устройство в вертикальном положении (с кнопкой “домой” внизу) перед собой, ось X (положительная) будет по правой стороне, ось Y (положительная) будет направлена вверх, а ось Z (положительная) будет указывать на вас.
Вы можете получить значение акселерометра, путем доступа к свойству Input.acceleration.
Приведенный ниже пример скрипта позволяет двигать объект, используя акселерометр:
Фильтр низких частот
Показания акселерометра могут быть отрывистыми и с шумом. Применив низкочастотную фильтрацию на сигнал, вы сгладите его и избавитесь от высокочастотного шума.
Приведенный ниже скрипт демонстрирует, как применить низкочастотную фильтрацию на показания акселерометра:
Я хочу получить как можно более точные показания акселерометра. Что я должен делать?
Вы можете получить доступ ко всем замерам, выполненным акселерометром в текущем кадре. Следующий код иллюстрирует простое среднее всех событий акселерометра, которые были собраны в течение последнего кадра:
Mobile device input
On mobile devices, the Input class offers access to touchscreen, accelerometer and geographical/location input.
Доступ к клавиатуре на мобильных устройствах обеспечивается через iOS keyboard.
Multi-touch screen
The iPhone, iPad and iPod Touch devices are capable of tracking up to five fingers touching the screen simultaneously. You can retrieve the status of each finger touching the screen during the last frame by accessing the Input.touches property array.
Android устройства не имеют определенного лимита на количество нажатий, которое можно отслеживать. Он колеблется от устройства к устройству и может варьироваться от одного-двух нажатий на старых устройствах, до пяти нажатий на некоторых новых.
Каждое нажатие пальцем представлено в структуре данных Input.Touch:
| Property: | Description: | |
|---|---|---|
| fingerId | The unique index for a touch. | |
| position | The screen position of the touch. | |
| deltaPosition | The screen position change since the last frame. | |
| deltaTime | Amount of time that has passed since the last state change. | |
| tapCount | The iPhone/iPad screen is able to distinguish quick finger taps by the user. This counter will let you know how many times the user has tapped the screen without moving a finger to the sides. Android devices do not count number of taps, this field is always 1. | |
| phase | Describes the state of the touch, which can help you determine whether the user has just started to touch screen, just moved their finger or just lifted their finger. | |
| Began | A finger just touched the screen. | |
| Moved | A finger moved on the screen. | |
| Stationary | A finger is touching the screen but hasn’t moved since the last frame. | |
| Ended | A finger was lifted from the screen. This is the final phase of a touch. | |
| Canceled | The system cancelled tracking for the touch, as when (for example) the user puts the device to their face or more than five touches happened simultaneously. This is the final phase of a touch. | |
Here’s an example script that shoots a ray whenever the user taps on the screen:
Mouse simulation
On top of native touch support Unity iOS/Android provides a mouse simulation. You can use mouse functionality from the standard Input class. Note that iOS/Android devices are designed to support multiple finger touch. Using the mouse functionality will support just a single finger touch. Also, finger touch on mobile devices can move from one area to another with no movement between them. Mouse simulation on mobile devices will provide movement, so is very different compared to touch input. The recommendation is to use the mouse simulation during early development but to use touch input as soon as possible.
Акселерометр
As the mobile device moves, a built-in accelerometer reports linear acceleration changes along the three primary axes in three-dimensional space. Acceleration along each axis is reported directly by the hardware as G-force values. A value of 1.0 represents a load of about +1g along a given axis while a value of –1.0 represents –1g. If you hold the device upright (with the home button at the bottom) in front of you, the X axis is positive along the right, the Y axis is positive directly up, and the Z axis is positive pointing toward you.
Вы можете получить значение акселерометра, путем доступа к свойству Input.acceleration.
Приведенный ниже пример скрипта позволяет двигать объект, используя акселерометр:
Фильтр низких частот
Показания акселерометра могут быть отрывистыми и с шумом. Применив низкочастотную фильтрацию на сигнал, вы сгладите его и избавитесь от высокочастотного шума.
Приведенный ниже скрипт демонстрирует, как применить низкочастотную фильтрацию на показания акселерометра:
Я хочу получить как можно более точные показания акселерометра. Что я должен делать?
Вы можете получить доступ ко всем замерам, выполненным акселерометром в текущем кадре. Следующий код иллюстрирует простое среднее всех событий акселерометра, которые были собраны в течение последнего кадра:
Эмулятор андроид для Unity Build and run
Есть несколько эмуляторов, которые успешно обрабатывают apk Unity. На все них apk надо сохранить и вручную загружать. Но не получилось найти не один, который работает по команде Build and Run, как просто подключенное android устройство.
Есть ли что то подобное? У nox app player есть интеграция с Android Studio, но с юнити при тех же настройках не работает.
Поделитесь опытом, возможно ли в один клик запускать через эмулятор приложения прям из Unity.
1 ответ 1
Для бИлда в Юнити и одновременного теста на андройде есть такая штука как Unity Remote 4.
Обычно на андройде скачивается это приложение (через google play к примеру), и также в настройках Debugging надо поставить галочку Аndroid Debugging (enable the Android Debug bridge «adb» intefrace).
Надо не забыть подключить телефон к компьютеру (или на чем идет разработка).
При запуске приложения можно будет видеть следующую картинку:
В Unity надо переключиться на платформу Android. А также в настройках
Edit → Project Settings → Editor в пункте Unity Remote → Device выбрать Any Android Device
Если телефона нет, то данная фишка может прокатить только с эмулятором андройда, установленным через AVD Manager.exe Причем настройка CPU/ABI обязательно должна быть ARM armeabi. При значении Intel x86 работать не будет.
Примерные настройки для AVD:
После установки эмулятора надо установить Unity Remote 4 из apk в эмулятор используя команду: adb.exe install adb.exe install path/to/apk (Windows) или adb install path/to/apk (Linux/Mac).
Связываем две мобильные платформы в едином коде на Unity
Для Unity-разработчиков уже привычно управление игровыми потоками и сервисами на таких платформах, как iOS и Android. Однако после того, как в экосистеме появились мобильные сервисы Huawei, теперь нужно поддерживать и еще одну версию игры, если вы хотите охватить игроков, у которых есть девайсы этой фирмы.
Эта статья — как раз о том, как минимальными усилиями управлять зависимостями между несколькими мобильными сервисами Android и Huawei в одной кодовой базе.
Рисунок 1. Разница между поддержкой разных платформ и мобильных сервисов
Как видно на рисунке выше, мобильные телефоны Huawei используют операционную систему Android, так что и ваш Unity-проект должен использовать ее же при сборке для девайсов этой фирмы. Однако теперь вам нужно разработать 2 разных APK на Android или же отдельный пакет для Huawei AppGallery.
В чем разница между этими APK?
Первое и главное различие — мобильные сервисы. Речь идет о таких сервисах, как внутриигровые покупки, реклама, игровые сервисы, аналитика и т. д. Вы не можете использовать GMS в мобильных устройствах Huawei. Из-за этого возникает необходимость в создании двух APK: для релиза в Huawei AppGallery и в Google Play.
Но не волнуйтесь: мы можем справиться с этими различиями в одной кодовой базе.
Расскажем о двух небольших приемах, которые помогут решить эти проблемы.
1. Вы когда-нибудь слышали о #defines?
Благодаря определениям (defines) мы можем управлять нашими потоками во время сборки, а благодаря единой среде разработки — и во время кодирования.
О каких потоках речь?
Представьте, что вам нужно оперировать двумя видами игровых сервисов: Google Play и Huawei. Чтобы создать для них приложение в одном коде, можно разделить его при помощи определений (defines). Рассмотрим небольшой пример:
Если вы добавите ключевое слово «HMS_BUILD» в ваш список определений, игра вызовет HMSGameServiceProvider. Так мы сможем управлять нашими потоками в одном коде.
Для управления определениями перед сборкой можно использовать приведенный ниже скрипт. После изменения и сохранения 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. Схема работы сервисных модулей
Для каждого сервиса у нас будут свои;
Теперь давайте рассмотрим примеры и попытаемся понять, что мы можем сделать с помощью описанного в статье метода.
Чтобы абстрагировать мобильные сервисы от игровой логики, мы будем использовать менеджеров. Менеджеры связываются с провайдерами через 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:
В случае «HMS_BUILD»:
В случае «GMS_BUILD»:
Демо-проект и подготовленные APK для HMS и GMS можно найти по ссылке на GitHub.



