«Прощай» — Девлог #2: Диалоги, баги и бессонные ночи
Привет, DTF! Продолжаю разработку «Прощай» - психологического хоррора про 16-летнего парня, потерявшего отца на СВО. Сегодня расскажу как прошла последняя неделя разработки.
Что за игра?
Если пропустили первый пост: это 2D сайд-скроллер с мета-механиками. Игра создаёт текстовые файлы на вашем компьютере, а в финале... впрочем, не буду спойлерить. 7 дней из жизни Андрея. Рутина, диалоги, сон. И постепенно раскрывающаяся травма.
Что нового в этом обновлении
🗨 Система диалогов
Наконец-то NPC разговаривают. Мать, Миша, Алина - у каждого свои реплики на каждый из 7 дней. Текст появляется над головой персонажа при нажатии E. Добавил эффект печатной машинки - буквы появляются по одной. Мелочь, но атмосферу создаёт.
Охота на баги
А теперь к самому интересному - как я воевал с Unity.
Мигание игрока при загрузке
Захожу в игру - персонаж мигает как новогодняя гирлянда. Пару секунд подёргается и успокаивается. Красиво, но не то что нужно.
Оказалось, Animator включался раньше, чем устанавливалась позиция персонажа. Unity пытался одновременно проиграть анимацию и переместить спрайт - получалась дискотека.
Решение: отключаю Animator в Awake(), ставлю позицию, жду пару кадров, включаю обратно. Костыль? Возможно. Работает? Ещё как.
Персонаж-космонавт
Хотел сделать анимацию "дыхания" - чтобы персонаж слегка покачивался. Сделал, запустил — персонаж взлетел на полметра над полом и завис там.
Проблема была в Pivot спрайтов. По умолчанию Unity ставит точку привязки в центр картинки. Когда анимация меняла размер спрайта, персонаж "прыгал" относительно центра.
Поменял Pivot на Bottom (низ спрайта) - теперь ноги остаются на месте, двигается только верхняя часть тела. Но после этого пришлось пересчитывать все координаты спавна во всех сценах. Весело провёл вечер.
Меню паузы - невидимка
Нажимаю Escape - ничего не происходит. Проверяю код - всё правильно. Проверяю Inspector - ссылки назначены. Проверяю Canvas - существует. Что не так?
Оказалось, три проблемы одновременно:
- Забыл удалить проверку на старый DialogueUI, который уже удалил
- Canvas Sort Order был ниже чем у других UI-элементов
- Panel была активна по умолчанию и скрипт её отключал в Awake(), но потом не мог включить обратно
Час дебага. Час. На кнопку паузы.
TextMeshPro не хочет привязываться
Создаю поле для текста в скрипте, пытаюсь перетащить TextMeshPro компонент в Inspector - Unity не даёт. Поле подсвечивается, но не принимает объект.
Долго думал что сломал проект. Оказалось, в коде указал тип TextMeshProUGUI, а в сцене использовал обычный TextMeshPro (World Space). Это разные типы.
Решение - использовать базовый класс TMP_Text, который принимает оба варианта. Мелочь, но если не знаешь — можно убить несколько часов.
Технические улучшения
- Переписал 15+ скриптов с нуля
- Добавил защиту от двойного вызова переходов между сценами (раньше можно было заспамить кнопку и сломать игру)
- Затемнение экрана теперь работает даже когда Time.timeScale = 0
- Игрок не может ходить во время диалогов
- Настройки сохраняются между сессиями
Что дальше
- 🔊 Звуки (шаги, двери, эмбиент дворов)
- 🌙 Доработка системы смены дней
- 📂 Больше мета-файлов с историей
- 🎬 Флешбек-сцена (ключевой момент сюжета)
Известные проблемы
- Звуков пока нет вообще
- Флешбек не реализован
- Возможно что-то ещё сломано, о чём я пока не знаю
Итого
Неделя багфикса. Код переписан, диалоги работают, персонаж больше не левитирует. Маленькие победы.
Разработка инди-игры в одиночку это 20% креатива и 80% гугления "почему Unity делает вот так".
Если интересно следить за разработкой - пишите, буду делать девлоги регулярно.
Ссылка на itch.io: [сюда клацать]
P.S. Это не развлекательная игра. Это попытка поговорить о сложном. Если тема вас триггерит возможно, стоит подождать полного релиза и отзывов.
— Xyeshis