Вы разрабатываете RPG с процедурно генерируемым подземельем. Ваша задача — реализовать систему логирования, которая поможет отлаживать генерацию уровней и боевую систему.
Вам дан класс DungeonGenerator, который генерирует комнаты и врагов, и класс CombatSystem, который обрабатывает бои.
В текущем виде они используют сырой Debug.Log, который захламляет консоль и будет тормозить релизную сборку.
- Создайте класс
GameLoggerсо следующими методами:LogGeneration(string message)— логи для процесса генерации подземелья. Должен работать ТОЛЬКО в редакторе Unity.LogCombat(string message)— логи для боевой системы. Должен работать в Development билдах и в редакторе.LogCriticalError(string message)— критическая ошибка. Должен работать ВСЕГДА (включая Release билды) и записывать сообщение в файлcritical_errors.txtвApplication.persistentDataPath.
- Модифицируйте код классов, заменив прямые вызовы
Debug.Logна вызовы вашегоGameLogger. - Настройте перехват всех логов через
Application.logMessageReceived, чтобы все сообщенияLogGenerationиLogCombatтоже дублировались в файлfull_debug.log, но только в Development билдах (проверьте черезDebug.isDebugBuild).
// DungeonGenerator.cs
using UnityEngine;
public class DungeonGenerator : MonoBehaviour
{
public void GenerateDungeon()
{
Debug.Log("Начинаем генерацию подземелья...");
// ... логика генерации
Debug.Log("Создана комната #" + Random.Range(1, 20));
// ... ещё логика
Debug.Log("Генерация завершена. Всего врагов: " + Random.Range(5, 50));
}
}
// CombatSystem.cs
using UnityEngine;
public class CombatSystem : MonoBehaviour
{
public void Attack( GameObject target, int damage )
{
Debug.Log($"Атака по {target.name} с уроном {damage}");
// ... боевая логика
if (Random.value < 0.1f)
Debug.LogError("КРИТИЧЕСКАЯ ОШИБКА: цель не найдена в боевой системе!");
}
}- При запуске в редакторе Unity — в консоли видны все логи (и генерации, и боя, и ошибки).
- В Release билде (без галочки Development Build) — вызовы
LogGenerationиLogCombatне выполняются совсем, но ошибки пишутся в файл. - В Development билде — в папке
persistentDataPathпоявляетсяfull_debug.logсо ВСЕМИ логами (дублируются из консоли) и отдельноcritical_errors.txtс критическими ошибками. - Код не должен содержать директив
#if ... #endif(используйте[Conditional]и проверкуDebug.isDebugBuild).
- Скрипт с решением задачи -
GameLogger.cs - Изменённые исходные скрипты: