Вывести сообщение в консоль (Отладка, дебаг)
Вывести сообщение в консоль можно через метод Debug.Log() .
Debug.Log("Сообщение для отладки"); Debug.LogError("Сообщение с ошибкой");
В результате во вкладке Console будут показываться сообщения.
Обновлено: 26 ноября 2021
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
- Спрайты
- Префабы
- Добавить или изменить небо (Skybox)
- Текстурирование
- Изменить редактор скриптов по умолчанию
- Анимировать объект
- Вывести сообщение в консоль (Отладка, дебаг)
- Случайное число
- Поворачивать объект в сторону курсора мыши
Отправка сообщений в окно «Вывод»
Во время выполнения сообщения в окне вывода можно написать с помощью класса Debug или Trace; оба класса входят в библиотеку классов System.Diagnostics. Класс Debug используется, если необходимо выводить сообщение только в отладочной версии программы. Класс Trace используется в том случае, если необходимо выводить сообщение и в отладочной версии программы, и в выпускаемой.
Методы вывода
Классы Trace и Debug предоставляют следующие методы вывода:
- Различные методы Write , которые выводят сведения без прерывания выполнения программы. Эти методы заменяют метод Debug.Print , который использовался в предыдущих версиях Visual Basic.
- Методы System.Diagnostics.Debug.Assert и System.Diagnostics.Trace.Assert, которые прерывают выполнение программы и выводят сведения, если заданное условие не выполняется. По умолчанию метод Assert отображает сведения в диалоговом окне. Дополнительные сведения см. в разделе Утверждения в управляемом коде.
- Методы System.Diagnostics.Debug.Fail и System.Diagnostics.Trace.Fail, которые всегда прерывают выполнение программы и выводят сведения. По умолчанию методы Fail отображают сведения в диалоговом окне.
В окне вывода также могут отображаться сведения о следующем:
- Загруженные или выгруженные модули отладчика.
- Вызванные исключения.
- Завершившиеся процессы.
- Завершившиеся потоки.
Связанный контент
- Безопасность отладчика
- Окно выходных данных
- Трассировка и инструментирование приложений
- Типы проектов C#, F# и Visual Basic
- Отладка управляемого кода
Инди за 0$ на Unity. Часть 1: Консоль
Внешний вид, шрифты и расположение объектов сугубо на усмотрение разработчика. Главное чтобы консоль была растянута по горизонтали, а положение по вертикали выбирать только вам.
Когда UI элементы будут готовы, наступает время кода. Я весь свой код всегда сую в пространство имён Game. Таким образом я всегда знаю какой код мой, какой не мой и избегаю любых конфликтов имён. Для консоли я использую подпространство Game.Console.
Создаём класс Console в пространстве имён Game.Console:
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace Game.Console < public struct Command < public string description; public Delegate function; >public class Console : MonoBehaviour < #region Static public static Console instance = null; static Dictionary
Класс Console имеет ссылку на себя в статической переменной instance. Есть статические методы ReginsterCommand\UnregisterCommand, позволяющие мне регистрировать\удалять команды из любой точки проекта.
Кидаем этот класс на наш канвас, присваиваем через инспектор ему инпут филд и лог. В инпутфилде указываем коллбек Console.ProcessInput на событие OnEndEdit для того чтобы перехватывать ввод пользователя.
Обработка ввода
Дальше нам нужно обрабатывать данные, которые пользователь вводит в консоль. По факту мы получаем String который нам нужно распарсить, вырвав оттуда название консольной команды и аргументы для её выполнения. Т.к. мы хотим иметь гибкость при объявлении команд, используя в аргументах комманды не только строки, но и другие объекты, нам нужно в рантайме определять тип аргумента и тайпкастить его строку в нужный тип.
Для этого мы напишем класс InputProcessor
Этот класс принимает в конструкторе строку и при вызове метода Run парсит её. Если что-либо идёт не так, то мы получаем Exception и прерываем выполнение кода.
Т.к. данный класс довольно критический, я решил покрыть его тестами ещё на стадии написания. Благодаря тестам я всегда уверен, что он работает и это греет мне душу, а так же позволяет спать ночами.
Рекомендую сохранить эти тесты и запускать при любом апдейте процессора дабы спать спокойно как я.
Этот тест файл я не рефакторил, рекомендую это сделать при расширении функционала процессора.
Итог
Мы разработали консоль, которая позволяет нам объявлять, удалять команды, парсит, тайпкастит аргументы комманд и перехватывает события встроенного в юнити логгера. Теперь мы можем в любом компоненте объявить комманды, которые будут доступны для вызова в консоли, например:
private void OnEnable() < Console.RegisterCommand("pl_ms", "set player movement speed", new System.Action(SetSpeed)); > private void OnDisable() < Console.UnregisterCommand("pl_ms"); >public void SetSpeed(float val)
Таким незамысловатым способом мы можем отлаживать\тестировать нужный нам функционал и это будет быстрее чем мы будем отрисовывать кастомные InspectorGUI элементы.
Домашнее задание
- Объявить кастомный exception при ошибке парсинга аргументов в InputProcessor и отлавливать его в Console. Сейчас при фейле консоль ничего не говорит о том, что ей не удалось определить тайп аргумента. Нужно это исправить.
- Стилизация лога. Все сообщения из встроенного в юнити логгера приходят прямо в консоль как есть. Было бы круто сделать стилизацию по типу лог мессейджа.
- Тайпкастинг boolean сейчас case-sensitive. Нужно бы это исправить и дополнить тесты.
Что дальше?
В следующей главе мы создадим InputSystem для объявления кастомных экшенов и прослушивания событий по этим экшенам.
Debug.Log
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.