Attaching MonoDevelop Debugger To An Android Device
You can attach the MonoDevelop debugger to an Android device with ADB via TCP/IP. The process is described below.
Enable “USB debugging” on your device and connect the device to your development machine via USB cable. Ensure your device is on the same subnet mask and gateway as your development machine. Also, make sure there are no other active network connections on the device, i.e. disable data access over mobile/cellular network.
On your development machine, open up your terminal/cmd and navigate to the location of the ADB. You can find the ADB tool in /platform-tools/
Restart host ADB in TCP/IP mode with the following command:
This will have enabled ADB over TCP/IP using port 5555. If port 5555 is unavailable, you should use a different port (see ADB.) The following output should be produced:
DEVICEIPADDRESS is the actual IP address of your Android device. This should produce the following output:
This should produce the following output:
Build and run your Unity application to the device. Ensure you build your application with Development Build flag enabled and Script Debugging turned on.
Disconnect the USB cable as the device no longer needs to be connected to your development machine.
For some more details and for troubleshooting, see the Wireless Usage section in the Android developers guide for the ADB.
Note: The device sends multicast messages and the editor and MonoDevelop subscribe/listen for them. For the process to work, your network will need to be setup correctly for Multicasting.
Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.
Copyright © 2017 Unity Technologies. Publication: 5.6-001N. Built: 2017-07-12.
Unity Remote 4
Unity Remote (currently at version 4), is a downloadable app designed to help with Android or iOS development. The app connects with Unity while you are running your project in Play mode from the 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 nuisance of a full build for each test.
With version 4, Unity Remote has been completely rewritten and replaces the separate iOS and Android Remote apps used with earlier versions.
Device and Feature Support
Unity Remote currently supports Android devices (on Windows and OSX via a USB connection) and iOS devices (iPhone, iPad and iPod touch, through USB and only on OSX)
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:
Note that the Remote app simply shows the visual output on the device and takes input from it. The game’s actual processing is still done by the Unity editor on the desktop machine and so its performance is not a perfect reflection of the built app.
Obtaining and Using Unity Remote
Unity Remote can be downloaded 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:
Having downloaded the app, you should install and run it on your device and also connect the device to your computer using a USB cable.
To enable Unity to work with your device, you should open the Editor Settings in Unity (menu: Edit > Project Settings > Editor) and select the device to use from the Unity Remote section:
If you now click the Play button in the editor, you should see your game appear on the device as well as the Unity game window as Unity connects to the Remote app. While the game plays, input from the device (accelerometer, etc) will be 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
Currently Unity Remote doesn’t support multiple connected devices of the same kind (ie, two iPhones or two Androids) and to resolve this, it will automatically pick the first device it finds. However, it is fine to have one iOS and one Android device connected at the same time since you can select which one to use from the Editor Settings mentioned above (menu: Edit > Project Settings > Editor).
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 Unity editor while its visual content is streamed to the target device. Since the bandwidth between editor and device is limited, the stream must be compressed heavily for transmission and this compression inevitably reduces the image quality.
In the Unity Remote section of the Editor settings (menu: Edit > Project Settings > Editor), you can switch the compression method between JPEG and PNG and also optionally downsize the resolution of the screen image. PNG compression is “lossless” (ie, 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.
However, you should 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. You should make sure that you occasionally do a full build and test the “real” app.
The editor doesn’t connect to the iOS device on OSX
To establish the connection to the iOS device through USB, Unity uses a 3rd party utility (iproxy) which is known to misbehave occasionally. You can try the following to fix the problem:
In most cases reconnecting or restarting the iOS device is enough to restore the connection.
Real-time дебаг Android и iOS приложений на Unity
Когда разработка проекта идёт на компьютере, проблемы просмотра лога не встаёт. Но когда начинаешь разрабатывать на планшете, то всё становится гораздо печальнее. Разработчики движка добавили много разных полезных вещей в профайлер, но к сожалению забыли о простой консоли, чтобы переключившись на её вкладку разработчик мог смотреть сообщения от своей игры и отправлять какие-то консольные команды прямо с компьютера на планшет.
Это упущение мы сейчас и будем исправлять.
Если кратко, мы создадим таблицу в Google Docs, и скрипт, который будет при вызове добавлять туда значение. И создадим скрипт в движке, который будет слушать команды типа Debug.Log() и отправлять их нашему скрипту. Дел на 10 минут, но удобство повышается значительно. Если у вас в проекте реализована консоль, то можно сделать чтобы скрипт отправлял отклик (скажем содержимое написанного вами в какой-то ячейке таблицы), можно это передавать в качестве команды в консоль.
Работает всё довольно быстро, у меня интернет 50 mbit, сообщения появляются практически мгновенно. Таблица Google обновляется сама, рефрешить не надо.
Сначала простейший вариант, для понимания сути.
1. Настройка серверной части.
Для серверной части нужен аккаунт Google, потому что создавать таблицу мы будем в Google Drive.
Удалите созданный темплейт и скопируйте следующий код:
. В коде id 0Ap2rwVyty8rZdElOTFhlTG9BSEZGY29BZDlpQWdMR2c надо заменить на id вашей страницы, его можно взять из URL созданного вами Spreadsheet.
При вызове этого скрипта он будет брать созданную вами таблицу, и добавлять в последнюю строку время и значение, которое пришло по запросу GET с ключом p.
Сохраните скрипт под именем, к примеру, RemoteLogger.
Можно считать, что серверная часть работает нормально.
2. Клиентский Unity-скрипт.
Создайте скрипт, к примеру RemoteLogger.cs и поместите туда следующий код:
. Не забудьте поменять значение url на адрес вашего скрипта.
Этот скрипт слушает лог, берёт сообщение, кодирует для передачи по методу GET и отсылает его нашему скрипту, чтобы он добавил его в таблицу.
После добавления к GameObject и запуска, на открытой в вашем браузере таблице должно появиться «Hello world!» (таблица обновляется автоматически). Если этого не произошло, то вероятно вы забыли поменять id таблицы, url или при публикации скрипта настроили права неправильно.
3. Батчинг.
Если в программе много сообщений, то слишком расточительно создавать для каждого новый запрос. Мы будем передавать до 10 сообщений зараз, в зависимости от того, сколько есть на данный момент.
Сложного в изменениях ничего нет, поэтому я просто опубликую код и поясню кратко.
Сначала исправляем скрипт на сервере:
То есть перебираются параметры от p0 до p9, если есть значение — то оно добавляется.
Теперь код класса RemoteLogger.cs
Мы сделали чтобы логгер не исчезал при загрузке следующей сцены. Так же мы добавили очередь, в которую добавляются сообщения игры, и из которой периодически они отсылаются. Так же создали семафор, чтобы не было слишком много соединений на 1 момент.
В зависимости от ваших нужд, можно передавать в таблицу что это за сообщение error/warning/message и подсвечивать его соответсвенно, как это сделано в Unity.
Можно передавать стек, если вам важно видеть, откуда было оно отправлено.
Теоретически можно использовать построение графиков.
Можно сделать обратную связь, и передвать какие-то команды в игру, там уже слушая отклик скрипта и передавая его в консоль. Добавляется легко.
Можно консоль не делать, а добавить пункты меню, к примеру «Make screenshot», «Enable cheats», и отправлять их.
В общем, есть возможности для доработки и расширения. Делитесь вашими идеями и их реализациями, возможно они кому-нибудь пригодятся. 🙂
PS: Большое спасибо автору этой статьи из песочницы.
Как настроить Unity Remote для Huawei Honor?
Устройство: Honor 8x.
Бытует мнение, что в Интернете нет смысла спрашивать. Если хочешь получить ответ на вопрос, формулируй его как гайд, и тогда придёт эксперт, разнесёт твой гайд и тут же напишет, как делать правильно. А сам вопрос все проигнорят.
Но я попробую: хочу запускать отладку в движке и тут же играть с телефона, но не выходит. Помогите.
Что пробовал делать:
В общем, я весь день вертел это злобное колдунство и так, и этак. Очевидно не хватает скила, и понимания процессов. Если кто-то знает, что делать, подскажите, пожалуйста.
Кстати, как сделать, чтобы галочка «Отладка по USB» в Honor не слетала? (Xiaomi под рукой будет не всегда)
Как правильно ставить android-SDK и указывать к нему путь в движке?
UPD: галочка «Отладка по USB» слетает также в Honor 10I.
На 8Х решилось следующим образом: надо комплексно активировать 4 крыжика:
Отсутствие одного из 3-х вспомогательных заставляет «Отладку по USB» слетать.
Прочитал Huawei Horror и задумался…
Есть один дедовский лайфхак:
Качаем Google USB Driver, открываем inf, и в любом девайсе меняем ID девайса на наш ID. Для чайна-девайсов работает только так.
Но конечно не совсем понятно, зачем гуглу понадобилось костылить свой драйвер, когда есть UART. ред.
А я так пробовал, и чо-то не вышло. Там точно просто в inf хватит записи?
Конечно, я так уже с 2015 делаю. Открой просто adb и введи adb devices.
В inf смотри, чтобы совпадала архитектура. ред.
Лан, попробую ещё раз.
Мне помогло включить «передачу файлов по usb» вместо «зарядки по usb». Тогда галочка перестала слетать. Но почему-то remote 5 всё равно не работает.
Я, кстати, сделал, чтоб не слетала. Просто отклик минимальный был и я решил, что статья-гайд не нужна. Там нужно несколько опций выбрать, тогда не слетит. Ремоут даже запускался, но потом перестал, и я фиг знает, как добиться от него стабильности.
У меня все работало на сяоми само без танцев с бубном. ))
Профилируем Unity проект с Android Studio
Требования
Для полноценного профилирования приложения вам потребуется телефон с Android 8 или новее (API 27). По опыту, профилирование с Android-ами более старых версий несёт больше приключений, чем пользы. По этой причине я рекомендую обзавестись полной линейкой Nexus устройств, так как они имеют старое железо и последние обновления Android-а.
Настройка Unity проекта
Для получения результата, вам придётся настроить Unity проект определённым образом.
Настройки в Build Settings
Настройки в Player Settings
Подготовка Gradle проекта
После того, как вы установили все настройки, соберите Unity проект. Вы должны получить папку с Gradle проектом.
Unity по умолчанию собирает проект из расчёта, что вы планируете собирать из него финальный APK. Потому вся отладочная информацию из него удалена, но к счастью её можно вернуть. Для этого вам нужно подменить libil2cpp.so и libunity.so на версии с отладочной информацией.
libil2cpp.so
libunity.so
Это файл, который содержит low-level часть Unity Player. Так как мы делаем Release сборку, то Unity положила вам в проект файл без отладочной информации. Вам нужно подменить libunity.so на файл с символами.
Профилирование
Теперь вы можете начать профилировать в Android Studio, достаточно нажать кнопку запуска профайлера.
Android Studio запустит приложение и начнётся сессия профилирования
По умолчанию, Android Studio показывается графики, но не производит сэмплирование данных. Для запуска процесса, вам нужно кликнуть на треке CPU, чтобы профайлер переключится на вид CPU. При этом сверху окна появится дропдаун и кнопка ‘Record’.
Выберите Sampled ‘Native’ (В Android Studio 3.3 — C/C++ Native), и нажмите кнопку ‘Record’.
Так как запись производится на диск устройства, по опыту лучше не записывать более 5-8 секунд, многие устройства будут фейлится и на меньшем кол-ве данных (список проверенных устройств смотрите в конце статьи).
Для получения результата нажмите ‘Stop’ и потом красный квадрат, чтобы прервать сессию. Сложно понять задумку авторов, но если вы не остановите запись полностью, то профайлер не всегда начинает анализ полученных данных и ваш отрезок с данным уедет в далёкие дали.
После этого остаётся только немного подождать, через 30-50 секунд профайлер выдаст вам результат. Если всё настроено верно, вы получите capture со всем именами функций