Класс Debug
Класс Debug позволяет выводить в Unity Editor информацию, которая помогает понять, что происходит в проекте во время его работы. Например, с его помощью можно печатать сообщения в окно Console, рисовать вспомогательные линии в окнах Scene и Game и ставить режим Play на паузу прямо из скрипта.
На этой странице дан обзор класса Debug и типичных сценариев его использования в скриптах. Полный справочник по всем членам класса Debug см. в Справка по отладочному скрипту.
Регистрация ошибок, предупреждений и сообщений
Unity иногда регистрирует ошибки, предупреждения и сообщения в окне Консоли. Debug класс позволяет сделать то же самое из вашего собственного кода, как показано в примере ниже:
Debug.Log("This is a log message.");
Debug.LogWarning("This is a warning message!");
Debug.LogError("This is an error message!");
Каждый из трех типов (ошибка, предупреждение и сообщение) имеет свой тип значка в окне Консоли.
Все, что записывается в Окно Консоли (Unity, или вашим собственным кодом) также записывается в Файл Журнала.
Если Ошибка Пауза включена в Консоли, любые ошибки записываются в Консоль через Debug классе, приостанавливают режим Play.
Также можно предоставить второй необязательный параметр для этих методов журнала, чтобы указать, что сообщение связано с определенным GameObject, например:
using UnityEngine;
public class DebugExample : MonoBehaviour
{ void Start()
{
Debug.LogWarning("I come in peace!", this.gameObject);
}
}
Преимущество этого заключается в том, что при нажатии на сообщение в консоли, GameObject, связанный с этим сообщением, выделяется в Hierarchy, что позволяет определить, к какому GameObject относится сообщение. На следующем изображении, при выборе предупреждения I come in peace! выделяется сообщение Alien (8) GameObject.
Использование класса Debug
Debug классе есть два метода для рисования линий в окнах Scene и Game. Это DrawLine и DrawRay.
В этом примере к каждой Сфере GameObject в сцене добавлен скрипт, который использует Debug.DrawLine для указания ее вертикального расстояния от плоскости, где Y равен нулю. Обратите внимание, что последний параметр в этом примере — это время в секундах, в течение которого линия остается видимой в Редакторе.
using UnityEngine;
public class DebugLineExample : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
float height = transform.position.y;
Debug.DrawLine(transform.position, transform.position - Vector3.up * height, Color.magenta, 4);
}
}
И результат в представлении Scene выглядит следующим образом:
Исключение кода отладки из сборок, не предназначенных для разработки
API журналирования UnityEngine.Debug не удаляются из релизных сборок и при вызове записывают данные в файлы журналов. Чтобы предотвратить это, используйте директивы #if или условный атрибут, сделав компиляцию вызовов Debug зависимой от символа скриптинга, определённого только в отладочных сборках.
В следующем примере используется условный атрибут с символом скрипта ENABLE_LOGS, который определяется только в сборках для разработки:
public static class Logger {
[Conditional("ENABLE_LOGS")]
public static void Debug(string logMsg) {
UnityEngine.Debug.Log(logMsg);
}
}
Дополнительные сведения см. в Условная компиляция в Unity.