Система определяет материал, угол контакта и энергию пули. На основе этого: рикошет, пробитие или застревание.
Каждый материал имеет свой профиль: порог энергии, коэффициент потерь. На каждом событии пуля теряет энергию. Второе попадание — меньше урона, третье — ещё меньше. Урон считается из текущей скорости пули.
В этом патче основной упор был сделан на систему регистрации попаданий и оптимизацию обработки столкновений.
В Framework появилась универсальная система получения урона, которая не навязывает какой-либо конкретный подход к реализации логики. Поддерживаются сразу несколько сценариев использования:
• Автоматическое применение урона через один флаг. Минимум настройки, всё работает сразу после подключения компонента.
• Полноценная интеграция с Gameplay Ability System. Framework умеет применять Gameplay Effects напрямую через Ability System Component.
• Полностью ручной режим. Компонент лишь уведомляет о попадании, а вся логика остаётся под контролем разработчика.
Также предусмотрен Fallback-режим. Если у объекта нет компонента Framework, но реализован стандартный TakeDamage, система всё равно сможет передать ему урон (при необходимости это поведение можно отключить).
Collision LOD |
Теперь система автоматически меняет точность трейсов в зависимости от расстояния до ближайшего игрока:
• Близко → максимальная точность.
• Средняя дистанция → более дешёвые проверки.
• Далеко → минимальная стоимость трейсов и проверки выполняются не каждый кадр.
При этом даже на самых дальних дистанциях быстрые снаряды не проходят сквозь тонкую геометрию. Для этого используется трейс от предыдущей позиции до текущей, что исключает туннелирование даже при пропуске кадров.
Все дистанции масштабируются автоматически относительно дистанции перехода снаряда в Dormant, поэтому система легко адаптируется под разные проекты без ручной перенастройки множества параметров.
📈 Результат фазы: • Универсальная система регистрации попаданий. • Интеграция с GAS и стандартным UE Damage. • Collision LOD с автоматическим масштабированием. • Измеримый прирост производительности без уменьшения количества активных снарядов.
Добавил в систему «dormant LOD» — если снаряд улетел далеко от игрока и его никто не видит, он «замирает»: физика для него не считается, столкновения не проверяются. Как только он снова оказывается в зоне видимости — оживает. При пробуждении снаряд проверяется не одной линией, а несколькими сегментами вдоль настоящей дуги.
Результат теста на одинаковом бюджете кадра: — без заморозки: ~33 000 снарядов — с заморозкой: ~98 500 снарядов
Немного поправил архитектуру и по мелочам сделал рефакторинг.
При параллельном расчёте снарядов на разных ядрах процессора три места в коде могли случайно записать результат в одну и ту же память одновременно. Переделал: каждый поток пишет в свой изолированный буфер, результаты сводятся по очереди без конфликтов.
Добавил чистый расчётный блок — гравитация, сопротивление воздуха, без завязки на движок. Понадобится для заморозки дальних снарядов
Roadmap перед релизом первой версии:
Фаза 0 — Фундамент переработка архитектуры, математика под оптимизацию. ☑️
Фаза 1 — Заморозка дальних снарядов Снаряды, которых не видно, перестают считаться каждый кадр.☑️
Фаза 2 — Система урона GAS или что-то попроще, на выбор.
Фаза 3 — Сеть Работает в мультиплеере (в приоритете — listen server), при этом одиночная игра не платит за сеть.
Фаза 4 — Полировка Финальная сборка в отдельный плагин под релиз.
Дальше в планах: урон по дистанции/скорости, хедшоты, рикошеты и разлёт осколков при попадании.
Уже готова Фаза 1, завтра будет пост о результатах и приросте производительности.
• Добавлена система баллистических профилей через Data Assets. • Общие параметры снарядов больше не хранятся отдельно для каждого экземпляра. • Вместо набора дублирующихся данных каждый снаряд теперь хранит только ссылку на свой профиль. • Полностью обновлен пайплайн спауна под новую архитектуру.
появилось четкое разделение между:
* данными конкретного снаряда; * данными типа снаряда.
На практике это означает, что десятки тысяч одинаковых снарядов больше не таскают за собой одинаковые значения массы, гравитации и параметров коллизии.
Нашел свой первый проект который делал 3 года назад🎁
Жаль исходники не сохранились, но даже сейчас я помню как плохо все было сделано в плане архитектуры и оптимизации. Вообще проект сам по себе сырой и незакончен, это был проект просто для обучения основным инструментам UE. Кому интересно можете поиграть.