«Прощай» — Девлог #2: Диалоги, баги и бессонные ночи

Привет, DTF! Продолжаю разработку «Прощай» - психологического хоррора про 16-летнего парня, потерявшего отца на СВО. Сегодня расскажу как прошла последняя неделя разработки.

Что за игра?

Если пропустили первый пост: это 2D сайд-скроллер с мета-механиками. Игра создаёт текстовые файлы на вашем компьютере, а в финале... впрочем, не буду спойлерить. 7 дней из жизни Андрея. Рутина, диалоги, сон. И постепенно раскрывающаяся травма.

Что нового в этом обновлении

🗨 Система диалогов

Наконец-то NPC разговаривают. Мать, Миша, Алина - у каждого свои реплики на каждый из 7 дней. Текст появляется над головой персонажа при нажатии E. Добавил эффект печатной машинки - буквы появляются по одной. Мелочь, но атмосферу создаёт.

Охота на баги

А теперь к самому интересному - как я воевал с Unity.

Мигание игрока при загрузке

Захожу в игру - персонаж мигает как новогодняя гирлянда. Пару секунд подёргается и успокаивается. Красиво, но не то что нужно.

Оказалось, Animator включался раньше, чем устанавливалась позиция персонажа. Unity пытался одновременно проиграть анимацию и переместить спрайт - получалась дискотека.

Решение: отключаю Animator в Awake(), ставлю позицию, жду пару кадров, включаю обратно. Костыль? Возможно. Работает? Ещё как.

Персонаж-космонавт

Хотел сделать анимацию "дыхания" - чтобы персонаж слегка покачивался. Сделал, запустил — персонаж взлетел на полметра над полом и завис там.

Проблема была в Pivot спрайтов. По умолчанию Unity ставит точку привязки в центр картинки. Когда анимация меняла размер спрайта, персонаж "прыгал" относительно центра.

Поменял Pivot на Bottom (низ спрайта) - теперь ноги остаются на месте, двигается только верхняя часть тела. Но после этого пришлось пересчитывать все координаты спавна во всех сценах. Весело провёл вечер.

Меню паузы - невидимка

Нажимаю Escape - ничего не происходит. Проверяю код - всё правильно. Проверяю Inspector - ссылки назначены. Проверяю Canvas - существует. Что не так?

Оказалось, три проблемы одновременно:

  1. Забыл удалить проверку на старый DialogueUI, который уже удалил
  2. Canvas Sort Order был ниже чем у других UI-элементов
  3. Panel была активна по умолчанию и скрипт её отключал в Awake(), но потом не мог включить обратно

Час дебага. Час. На кнопку паузы.

TextMeshPro не хочет привязываться

Создаю поле для текста в скрипте, пытаюсь перетащить TextMeshPro компонент в Inspector - Unity не даёт. Поле подсвечивается, но не принимает объект.

Долго думал что сломал проект. Оказалось, в коде указал тип TextMeshProUGUI, а в сцене использовал обычный TextMeshPro (World Space). Это разные типы.

Решение - использовать базовый класс TMP_Text, который принимает оба варианта. Мелочь, но если не знаешь — можно убить несколько часов.

Технические улучшения

  • Переписал 15+ скриптов с нуля
  • Добавил защиту от двойного вызова переходов между сценами (раньше можно было заспамить кнопку и сломать игру)
  • Затемнение экрана теперь работает даже когда Time.timeScale = 0
  • Игрок не может ходить во время диалогов
  • Настройки сохраняются между сессиями

Что дальше

  • 🔊 Звуки (шаги, двери, эмбиент дворов)
  • 🌙 Доработка системы смены дней
  • 📂 Больше мета-файлов с историей
  • 🎬 Флешбек-сцена (ключевой момент сюжета)

Известные проблемы

  • Звуков пока нет вообще
  • Флешбек не реализован
  • Возможно что-то ещё сломано, о чём я пока не знаю

Итого

Неделя багфикса. Код переписан, диалоги работают, персонаж больше не левитирует. Маленькие победы.

Разработка инди-игры в одиночку это 20% креатива и 80% гугления "почему Unity делает вот так".

Если интересно следить за разработкой - пишите, буду делать девлоги регулярно.

Ссылка на itch.io: [сюда клацать]

P.S. Это не развлекательная игра. Это попытка поговорить о сложном. Если тема вас триггерит возможно, стоит подождать полного релиза и отзывов.

— Xyeshis

5
1
1
1
1
15 комментариев