⚡️ Новая система частиц в Blockworld!
Сделали свою кастомную систему частиц. Работает она, как и всё остальное, на JSON, и использует наш собственный язык выражений — про него я рассказывал в прошлом посте.
Почему не Unity-партиклы, а свое решение?
Причин несколько, вот главные:
✔️ Своя физика — физика в игре у нас тоже кастомная (воксельная), и стандартные Unity-партиклы с ней никак не смогли бы взаимодействовать. А это куча эффектов, которые иначе просто потерялись бы: частицы, отскакивающие от блоков, оседающие на землю и т.д.
✔️ Моддинг — игра обрастает им с ног до головы, так что закладываем поддержку и тут тоже.
✔️ Архитектура — Unity-партиклы завязаны на MonoBehaviour, и в наших задачах это неудобно. Наша система целиком построена на чистых C#-классах, а отрисовка идёт через низкоуровневые API Unity.
✔️ Оптимизация — нам не нужны все навороты Unity партиклов. Достаточно небольшой части функционала (например, из форм — только куб и плоскость), за счёт чего расчёты становятся заметно проще и дешевле.
✔️ Тестируемость — мы не завязаны на Unity, поэтому всю симуляцию можно прогонять отдельно, без запуска игры. Результат детерминированный (один и тот же сид → один и тот же результат).
✔️ Дружит с нейронкой — формат простой и понятный, так что нейронка отлично собирает и правит эффекты сама. А проверять её работу легко благодаря той же тестируемости выше.
Что уже готово по функционалу?
✔️ JSON-формат — всё настраивается в нём. Легко перенести на бэкенд, зашить в мод-паки и т.д.
✔️ Симуляция и рендер — свой движок частиц с пулингом, без лишних аллокаций; отрисовка через низкоуровневый API, эффекты режутся по дальности и попаданию в кадр (благодаря системе чанков).
✔️ Столкновения с миром — частицы взаимодействуют с физикой: отскакивают, оседают, гаснут при контакте.
✔️ Язык выражений — поведение частиц можно задавать формулами (скорость, размер, цвет, время жизни и т.д.), а не только константами.
✔️ События и последовательности — эффекты могут запускать другие эффекты, разворачиваться по сценарию.
✔️ Привязка к сущностям и анимациям — частицы крепятся к сущностям (игроку, мобам, снарядам и т.д), а также проигрываются прямо с кадров анимаций по тригеру.
✔️ Редактор-лаборатория — проверяем результат, а заодно она заточена под работу с нейронкой, сделать скриншот, логи и т.д.
#blockworld #devlog #gamedev
Сделали свою кастомную систему частиц. Работает она, как и всё остальное, на JSON, и использует наш собственный язык выражений — про него я рассказывал в прошлом посте.
Почему не Unity-партиклы, а свое решение?
Причин несколько, вот главные:
✔️ Своя физика — физика в игре у нас тоже кастомная (воксельная), и стандартные Unity-партиклы с ней никак не смогли бы взаимодействовать. А это куча эффектов, которые иначе просто потерялись бы: частицы, отскакивающие от блоков, оседающие на землю и т.д.
✔️ Моддинг — игра обрастает им с ног до головы, так что закладываем поддержку и тут тоже.
✔️ Архитектура — Unity-партиклы завязаны на MonoBehaviour, и в наших задачах это неудобно. Наша система целиком построена на чистых C#-классах, а отрисовка идёт через низкоуровневые API Unity.
✔️ Оптимизация — нам не нужны все навороты Unity партиклов. Достаточно небольшой части функционала (например, из форм — только куб и плоскость), за счёт чего расчёты становятся заметно проще и дешевле.
✔️ Тестируемость — мы не завязаны на Unity, поэтому всю симуляцию можно прогонять отдельно, без запуска игры. Результат детерминированный (один и тот же сид → один и тот же результат).
✔️ Дружит с нейронкой — формат простой и понятный, так что нейронка отлично собирает и правит эффекты сама. А проверять её работу легко благодаря той же тестируемости выше.
Что уже готово по функционалу?
✔️ JSON-формат — всё настраивается в нём. Легко перенести на бэкенд, зашить в мод-паки и т.д.
✔️ Симуляция и рендер — свой движок частиц с пулингом, без лишних аллокаций; отрисовка через низкоуровневый API, эффекты режутся по дальности и попаданию в кадр (благодаря системе чанков).
✔️ Столкновения с миром — частицы взаимодействуют с физикой: отскакивают, оседают, гаснут при контакте.
✔️ Язык выражений — поведение частиц можно задавать формулами (скорость, размер, цвет, время жизни и т.д.), а не только константами.
✔️ События и последовательности — эффекты могут запускать другие эффекты, разворачиваться по сценарию.
✔️ Привязка к сущностям и анимациям — частицы крепятся к сущностям (игроку, мобам, снарядам и т.д), а также проигрываются прямо с кадров анимаций по тригеру.
✔️ Редактор-лаборатория — проверяем результат, а заодно она заточена под работу с нейронкой, сделать скриншот, логи и т.д.
#blockworld #devlog #gamedev