Unity 6.3
0 онлайн 3 гостей 3 в системе
Вход

Класс 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 выглядит следующим образом:

Вид Scene отображает группу сфер, каждая из которых имеет пурпурную линию, указывающую расстояние от плоскости, где Y равен нулю.
Вид Scene отображает группу сфер, каждая из которых имеет пурпурную линию, указывающую расстояние от плоскости, где Y равен нулю.

Исключение кода отладки из сборок, не предназначенных для разработки

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.

Дополнительные ресурсы