Коммерческий заказ. Клиент дал свое оружие и часть анимаций, а от меня требовалось сделать стрельбу ощутимой и собрать красивую локацию для ее теста.
↑ включите звук
Это был заказ от клиента. У него уже были свои модели оружия и часть анимаций, но стрельба ощущалась пустой. Моя задача: доработать механику стрельбы и сделать локацию, на которой эту стрельбу приятно тестировать. Именно эту локацию видно в первом видео.
Core loop: осмотреться -> занять позицию -> короткая очередь по цели -> вернуть прицел после отдачи -> перезарядка в укрытии -> смена позиции.
Уже в процессе выяснилось, что ассеты клиента плохо оптимизированы, поэтому вместе с механикой я переписал часть логики и 3д-моделей - и та же самая сцена стала работать на 80% быстрее (с точки зрения прироста FPS - c 50 до 90), чем была до меня.
Я разделил отдачу на два слоя: ствол уходит вверх по заранее заданной кривой, а в стороны его ведет случайно, но в узком коридоре. Так игрок может выучить поведение оружия, но длинная очередь все равно стоит ему точности.
Добавил хит-маркер для прицела, разные звуки попадания по объектам, разрушение мишеней через Chaos Destruction и декали под дырки от пуль.
Я упростил BP-связи, убрал лишние вычисления из тика и оптимизировал 3д-модели - без потери качества картинки. Та же сцена, что была у клиента до меня, стала работать на 80% быстрее.
↑ включите звук
Модели оружия были от клиента, а вот параметры я вынес в данные: скорострельность, кривая отдачи, разброс от бедра и в прицеле, тайминги перезарядки. Новое оружие теперь можно добавить строкой в таблице.
Выстрел считается трассировкой от камеры с дополнительной проверкой от дула, чтобы пули не проходили через край укрытия. Состояния оружия разложены по автомату: Idle / Firing / Reloading / Equipping - так нажатия не накладываются друг на друга.
Анимации клиента я оставил как базу, а покачивание и отдачу камеры вывел отдельно от них - числами и кривыми. Так можно менять ощущение оружия, не переделывая сами анимации.
Камера возвращается в исходную точку пружиной, но только на ту часть отдачи, которую игрок не убрал сам. Иначе прицел «уезжает» и стрельба перестает быть навыком.
Граф я разобрал по событиям: Possessed, BeginPlay, Tick, обновление вида от первого лица - каждое в своей рамке. Тяжелую логику убрал в collapsed-графы.. Event Tick Local отделен от общего тика: покадровая работа идет только у локального игрока. Это и была одна из причин, почему сцена стала быстрее.
Базовая поза идет через слот монтажей, а сверху Apply Mesh Space Additive добавляет покачивание для прицеливания, бега и приседа - каждый режим своим автоматом. Отдача приходит числами в Transform (Modify) Bone на кости оружия, а руки уже подтягиваются за ней по IK. Так ощущение стрельбы настраивается кривыми, а анимации клиента остаются нетронутыми.
Во первых: желание клиента это все таки закон, а во вторых - даже клиент может ошибаться, и поэтому моя задача выдать желаемый ему результат с технически верной реализацией.