В редакторе Unity есть удобные Debug.Log логи. Помимо того что они выводят сообщение в консоль, при клике на это сообщение тебя перенаправляет прямо в нужное место в скрипте - место, откуда был вызван этот дебаг. Но если хочется как то обернуть этот метод и добавить туда время события, например так
public static void LogError(this object obj, string message)
{
message += DateTime.Now.ToString();
Debug.LogError(message);
}
То любой клик по такому дебагу в консоли перенаправляет нас на этот самый метод, на нашу "Обертку". Как сделать так, чтобы можно было дополнять метод Debug.Log и при этом сохранялась функциональность перенаправления на нужную строчку скрипта?
Есть пара решений для вашего вопроса:
Ну с первым вариантом всё понятно, но если вы хотите для себя, как уважающий себя программист, создать своё окно с блек джеком и плюшками.
Приведу пример реализации:
public static void Log(object obj, string msg) {
// берёт стактрейс вызова
string stackTrace = UnityEngine.StackTraceUtility.ExtractStackTrace();
// разделяем стактрейс на строки. символ '\n' олицетворяет переход на новую строку
string[] row = stackTrace.Split('\n'); // метод Split('символ') разделяет строку на массив строк
// берем трейс который вызвал данный метод Log.
// данное число "1" можно менять, в зависимости какой хотите скрипт выбрать их стактрейса
// если полноценное консольное окно делать, то тут уже через цикл пускать
string trace = row[1]; //строка будет выглядеть так: "tester:ShowWarning() (at Assets\Scripts\tester.cs:26)"
// далее попытаемся взять конкретный скрипт и открыть в редакторе скриптов
// отрезаем всё лишнее, используя пробел между символами
string filePathAndLine = trace.Split(' ')[2]; // строка будет выглядеть так: "Assets\Scripts\tester.cs:26)"
// избавляемся от двоеточия
string filePath = filePathAndLine.Split(':')[0];// строка будет выглядеть так: "Assets\Scripts\tester.cs"
// попутно записываем номер строки
string lineString = filePathAndLine.Split(':')[1]; // строка будет выглядеть так: "26)" // затем необходимо удалить скобку
// удаляем скобку. Можно было использовать Remove, но это всё зависит от вашего усмотрения
string line = lineString.Split(')')[0];
// парсим строку в число
int lineNumber = int.Parse(line);
//загружаем объект чтобы потом его использовать
UnityEngine.Object file = UnityEditor.AssetDatabase.LoadAssetAtPath<Object>(filePath);
// берём в фокус скрипт (словно кликнули на него мышкой)
UnityEditor.Selection.activeObject = file; // не обязательно
// подсвечиваем объект желтым
UnityEditor.EditorGUIUtility.PingObject(file);// не обязательно
// открываем скрипт в редакторе скриптов на определённом номере строки
UnityEditor.AssetDatabase.OpenAsset(file, lineNumber);
}
Надеюсь вам поможет данный ответ, Удачи!
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как получить все данные из DataGridА так же как удалить строку
Есть небольшой кусок кода, его смысл заключался в том чтобы из массива (в котором приходили подобные цифры 1231
Подскажите пожалуйста, как мне установить высоту при начальной загрузки таблицы DataGrid с использованием DoubleAnimation, чтобы она не уходила за рамки...