Найти тему

Приемы простой отладки в Unity

Как часто вы запускали игру и не понимали, что происходит – объект персонажа вдруг улетал с экрана, куда-то пропадали враги, или при стрельбе не видно было выстрелов. Что делать в таких ситуациях, с чего начать поиск ошибки?

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

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

Рисунок 1. Персонаж врага в режиме разработки
Рисунок 1. Персонаж врага в режиме разработки

Когда персонаж доходит до расположения врага, то его на месте не оказывается. Куда же он пропал?

Рисунок 2. Враг в режиме игры
Рисунок 2. Враг в режиме игры

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

Рисунок 3. Режим паузы
Рисунок 3. Режим паузы

В окне иерархии найдем объект врага и убедимся, что он не пропал. Два раза кликнем по нему, и камера автоматически позиционируется на этом игровом объекте.

Рисунок 4. Враг в режиме паузы
Рисунок 4. Враг в режиме паузы

А теперь уменьшим масштаб, чтобы стал виден не только враг, но и сцена.

Рисунок 5. Игровая сцена в режиме паузы
Рисунок 5. Игровая сцена в режиме паузы

Теперь становится понятно, что враг просто стал падать вниз. Давайте проанализируем Инспектор игрового объекта врага.

Рисунок 6. Инспектор игрового объекта врага
Рисунок 6. Инспектор игрового объекта врага

У врага присутствует компонент Rigidbody2D. Чтобы такой объект взаимодействовал с другими объектами, в частности не падал ниже платформ, ему необходимо добавить компонент коллайдера, который как раз отсутствует. Если исправить эту ошибку, то при приближении к врагу, он никуда не исчезнет.

Рисунок 7. Враг с компонентом коллайдера
Рисунок 7. Враг с компонентом коллайдера

И познакомимся еще с одним полезным методом – вывод информации на консоль. Панель консоли используется для отображения служебной информации - ошибок, предупреждений и других важных для разработчика сообщений, генерируемых редактором Unity. Эти ошибки и предупреждения помогают найти проблемы в проекте и помогают их исправить. Мы можем использовать консоль также для вывода каких-то отладочных сообщений, чтобы узнать информацию о любом объекте. Подробнее про консоль можно почитать в статье https://dzen.ru/a/Zbd4hqTS2lcYoPXU.

Вывести информацию на консоль можно командой print().

На следующем рисунке показан пример использования команды print() для вывода имени игрового объекта.

Рисунок 8. Вывод имени игрового объекта на экран
Рисунок 8. Вывод имени игрового объекта на экран

Аналогично можно вывести координаты игрового объекта.

Рисунок 9. Вывод позиции игрового объекта на экран
Рисунок 9. Вывод позиции игрового объекта на экран

При запуске игры во вкладке консоли мы увидим следующие сообщения:

Рисунок 10. Вывод информации на консоли
Рисунок 10. Вывод информации на консоли

В первой строке мы видим имя объекта – «Cruiser 3», а во второй строке его позицию. Обратите внимания, что позиция выводится сразу в виде трехмерного вектора (тройки чисел), что очень удобно.

В команде print() можно дописывать поясняющую информацию при помощи строк, которые заключаются в двойные кавычки. Например, при такой записи:

print("name = " + transform.name + " x = " + transform.position.x);

На консоли мы увидим:

Рисунок 11. Вывод информации на консоль
Рисунок 11. Вывод информации на консоль

Тот текст, который был написан в двойных кавычках остается неизменным, а вместо transform.name и transform.position.x подставляются значения соответствующих параметров.