TGViewer
Channel Public Channel
Racing Heart inc.

Racing Heart inc.

@racingheartdev

Racing Heart - DevLog о разработке инди-игр, где главное - дрифт, скорость и чистое удовольствие от вождения.
Без рекламной шелухи: только рабочий процесс, тесты, провалы, обновления и капля бензиновой романтики.
Subscribers
31
Photos
54
Videos
12
Links
22

Showing posts older than #95 · Back to latest

Older Posts 18 shown
Post #94 185
Игра постепенно обрастает новым функционалом. За последний период накопился заметный пакет правок, поэтому публикую свежий апдейт. 🔼

Изменения 0.6.21:

Переработан гараж и меню выбора цвета
Добавлены характеристики машин
Появилась базовая монетизация - возможность получить удвоенную награду
Добавлена кнопка авторизации: теперь после входа можно сохранить результат гонки, и рекорд попадёт в таблицу лидеров
Быстрый рестарт на кнопку Del - для тех, кто любит сразу пробовать ещё раз
Можно скрыть фантомы других игроков, если хочется ехать трассу в одиночку
Добавил скейл интерфейса фантома при приближении
Доработал запись и подбор фантомов
Новые рекорды в таблице соответствуют именам фантомов для лучшего понимая соперников
Обновил меню результатов: появилась анимация и визуальная обратная связь при улучшении рекорда
Добавлена новая машина
Плюс правки трасс и фиксы багов

Попробуйте обновление - мне будет приятно.
Хочется увидеть новые рекорды и узнать ваши впечатления 👀🚗💨

Ссылка на Яндекс игры: https://yandex.ru/games/app/471288?draft=true&lang=ru

#RacingHeartDev #Unity #Game #Drift
  • ❤ 4
  • 👍 2
  • 🔥 1
Post #93 92
Добавил информативности при выборе машины 🚀

#RacingHeartDev #Unity #Game #Drift
  • 🔥 2
  • 👍 1
Post #92 93
Работа превращается в цепочку неожиданных задач.

Сейчас захотелось мне отобразить на фантоме тот же ник, который игрок видит в таблице лидербордов. Все равно капаюсь в мультиплеере. На первый взгляд это занятие на две-три минуты. НО!

В multiplayer-сессии объект игрока содержит ровно два поля: avatar и name. Значение name - это не публичный ник из лидерборда, а внутреннее «паспортное» имя учётной записи.

Поля publicName, которое как раз выводится в списках рекордов, в multiplayer API отсутствует.

Получается парадокс: таблица лидеров отдаёт настоящий публичный ник, а в самой игровой сессии - уже нет.

Сижу и размышляю: задача свелась бы к двум строчкам кода, если бы API возвращал просто
- ник игрока
- аватар
точно так же, как это реализовано для лидербордов.

Но этого нет - иначе Яндекс Игры не были бы Яндекс Играми.

Собственно способ я нашел, не знаю правда стоит ли. что думаете по этому поводу?

#RacingHeartDev #Unity #Game #Drift
  • ❤ 2
  • 🔥 2
Post #91 71
так то лучше😏
  • 🔥 3
  • 🎉 1
Post #89 79
Кстати, этот процесс подкинул мне пару идей. Добавить быстрый старт по клавише и убрать таймер отчета после рестарта гонки. Как вам?
  • 👍 3
Post #88 138
Иногда лидерборд делает для геймплея больше, чем любые новые механики 🚀
История с “Крановой террасой”.

Раньше мой лучший результат на этой трассе составлял 33 000 очков. Казалось, что выше уже не подняться: я выучил всю трассу, знал оптимальные траектории и стабильно показывал один и тот же результат.
Однако в один момент я обнаружил, что кто-то обошёл меня в таблице лидеров.

Я решил не сдаваться. Пересмотрел свои заезды, немного изменил траекторию в поворотах и улучшил результат до 35 500 очков, выйдя из игры с мыслью “ну теперь нормально”.
Но спустя какое-то время я снова зашёл в игру и увидел, что мой новый рекорд тоже побит - теперь лидер набрал 36 800 очков.

С этого момента вопрос стал принципиальным. Я сел за игру и начал использовать максимально рискованные приёмы: входить в повороты на пределе сцепления,давать максимального угла и балансировать на грани отбойника и пробовать разные машины. В результате удалось достичь 38 700 очков.

При этом изначально 33 000 казались абсолютным пределом. Однако благодаря соревнованию в таблице лидеров результат вырос почти на 8000 очков. И я уверен, что это ещё не предел. Я разберусь с задачи и сяду снова давать угла.

Вот для чего нужна таблица лидеров.
Это не просто цифры. Это постоянный вызов. Повод искать новые траектории и улучшать результат.

Присоединяйтесь к соревнованию.
Посмотрим, какие результаты будут дальше 🚗💨

Ссылка на Яндекс игры: https://yandex.ru/games/app/471288?draft=true&lang=ru

#RacingHeartDev #Unity #Game #Drift
  • 🏆 2
  • 👍 1
Post #87 96
Ретроспектива. Оптимизация под мобильные устройства и последствия отложенных решений. ‼️

Когда проект задуман для телефонов, сборку следует запускать как можно раньше. Это правило было известно. Но, как обычно случается, действовал иначе.

Поначалу полностью настроил систему управления, выровнял поведение при дрифте, параметры машин и трассы. В редакторе всё вело себя корректно. Только после этого я взялся за сборку под мобильные устройства. Результат - стабильные 15 кадров в секунду.

Поиск узкого места занял немного времени. Отладочный скрипт показал, что основная нагрузка приходится на код контроллера и на физические расчёты. Далее начался самый трудоёмкий этап.

Пришлось

- пошагово исследовать, какие функции тратят процессорное время,
- переписывать код,
- запускать тесты,
- анализировать новые метрики,
- повторять цикл заново.

Самым сложным оказалось не это. После упрощения контроллера машина стала вести себя иначе, и весь ранее достигнутый баланс дрифта перестал работать. В итоге выполнил одну и ту же задачу два раза: сначала под “жирную”-версию, затем под оптимизированную.

Отсроченное решение выросло в серьёзные проблемы и добавило рисков. Хорошо, что удалось вовремя сконцентрироваться на оптимизации и отложить остальные задачи; иначе работа затянулась бы ещё дольше.

О том, почему фокус часто эффективнее мульти-задочности, могу рассказать в следующих заметках.

#RacingHeartDev #Unity #Game #Drift
  • 👍 4
  • 🔥 3
Post #86 84
В процессе решение проблемы поймал себя на мысли:
а как так получилось что я потратил на эту задачу неделю?

Случай с мобильной оптимизацией заставил пересмотреть множество решений и допущений, которые в начале казались обычными.

Следующим постом планирую коротко разобраться, что пошло не так, какие выводы получил и что изменил бы сейчас.
Если тема интересна - ставьте 👍

#RacingHeartDev #Unity #Game #Drift
  • 👍 7
Post #85 194
Пришёл с хорошими новостями 🚀
После доработки контроллера и ряда итераций оптимизации, производительность заметно повысилась. Работы ещё много, но теперь игра запускается на телефоне без сильных зависаний - это заметный прогресс.

Вместе с этим в игру добавил
- новые цвета для кастомизации
- обновлённую систему столкновений
- правки на сценах и в машинах
- обновил камеру

Часть функций, которые планировал реализовать в этом спринте, не успел реализовать - проблемы с производительностью заняли много времени. Это не отмена, а перенос, всё реализую позже.

Дрифт немного изменился: ради повышения производительности пришлось упростить логику и убрать некоторые функции. Это не финальная версия, поэтому сейчас особенно важно ваше мнение.

Прошу поиграть и рассказать, как ощущается процесс - на основе этого буду решать, в какую сторону двигаться дальше.
Работы ещё много, но прогресс есть 💪

Ссылка на Яндекс игры: https://yandex.ru/games/app/471288?draft=true&lang=ru

#RacingHeartDev #Unity #Game #Drift
  • 🔥 4
  • 👏 2
Post #84 84
Короткое сообщение о текущем положении дел. 👀

Обновление задерживается из-за оптимизации под мобильные устройства.

Целую неделю разбирал код контроллера и физику: уменьшал число вычислений и добивался лучшей оптимизаций и меньших затрат CPU. К сожалению, к предсказуемому и стабильному результату пока не пришёл.

В один момент становится ясно: обойтись без уступок не выйдет. Я даю себе два дня на последнюю попытку: свести физику и механику дрифта к минимуму и посмотреть, что получится.

Если итог окажется неприемлемым, придётся отказаться от поддержки телефонов, чтобы не портить основной процесс игры и тот самый дрифт, который вам уже понравился либо изменить поведение машины.

Работа идёт дальше. Решение важное; как только определюсь, расскажу, что именно выбрал и по какой причине.
  • 🫡 3
  • 👍 1
  • 🤔 1
Post #83 80
Переделал систему настройки.🔼 Количество классов возросло кратно, но появилась понятная структура и разделение обязанностей.

Ранее почти вся логика находилась в одном классе - ColorPurchaseManager.
-обрабатывал покупку
-определял доступные для покупки элементы
-отправлял запросы на активацию цвета
-хранил данные состояния машины

Пока существовал один тип цветов - система функционировала. После добавления нового типа класс стал быстро увеличиваться: появились проверки, условия, временные решения. В определённый момент стало очевидно, что он стал слишком большим.

Отдельное разочарование вызвали enum - тупо начали мешать из за сравнений
Изначально система не предусматривала расширение, поэтому интегрировать новые типи оказалось сложно.

Пришлось приостановить разработку и потратить пару дней на приведение системы в порядок: распределить обязанности, упростить логику и сделать систему более гибкой.

Да, остались области для рефакторинга, но на данном этапе я сознательно останавливаюсь. Для текущих задач этого достаточно - важнее продолжать реализовывать функции, а не бесконечно улучшать архитектуру.

Как всегда, продолжаем движение вперёд 🚀
  • ❤ 2
  • 👍 1
  • 😱 1
Post #82 67
Обещал подробно объяснить - держу слово. Сейчас система столкновений и сброса множителя устроена так.

Сила удара считается по потере скорости. Берём разницу между скоростью в момент касания и сразу после неё, измеряем в метрах в секунду. Чем больше эта разница, тем выше класс удара. Формула одна: deltaSpeed = скорость до − скорость после. Никакой магии, только школьная физика.

Light: 0 - 5 м/с. Множитель падает на 35 %. Дрифт не прерывается. Лёгкий толчок почти без последствий - ошибся и продолжай.

Medium: 5 - 8 м/с. Множитель уменьшается на 65 %. Текущий дрифт обнуляется. Удар уже чувствуется: прогресс теряется, но не весь.

Strong: 8 м/с и выше. Множитель возвращается к 1, дрифт сброшен. Серьёзная ошибка - всё начинается заново.

Мелкие задевания прощаются. Чем тяжелее ошибка, тем строже штраф. Цель по-прежнему - чистое вождение, но без лишнего раздражения. Система не смотрит на стабильность дрифта: если фиксируется удар, он засчитывается.

Столкновения с PropReward (коллектаблы) не считается ударом, штрафа нет. Интерфейс реагирует тряской, сила толчка задаёт интенсивность. Все пороги и проценты хранятся в CollisionImpactService.Settings - баланс правится без изменения кода.

#RacingHeartDev #Unity #Game #Drift
  • 👍 5
  • 🔥 3
  • ❤ 1
Post #81 65
Рабочая неделя началась ! 👊
Скоро выложу пост про разбор сброса множителя.

Спасибо всем кто поделился мнением! 🙌
  • 🔥 3
  • ❤ 2
  • 👍 1
Post #78 90
ммм, перламутр 😏
  • 🔥 6
Post #76 79
Недавно я переписал систему столкновений и сброса множителя. Теперь множитель уменьшается в зависимости от силы удара, а не исчезает сразу.

Я размышляю, стоит ли объяснять, как это работает в коде, или продолжать улучшать игровой процесс . Хочу услышать ваше мнение что Вам будет интереснее. 👀
Post #75 78
Racing Heart inc. Как лучше чувствовать прогресс соперников на трассе?
Спасибо всем, кто проголосовал и написал в чатик 🙌
Даже при небольшом количестве голосов уже видно направление - дальше буду двигаться от этого решения.
  • 🫡 3
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →