Залогом приятной геймплейной составляющей любого шутера являются два фактора : механика передвижения снаряда и реалистичное поведение оружия, чья правдоподобность выражается в основном в отдаче.
Отдача является импульсом и при непрерывной стрельбе из автоматического орудия, будет вызывать все больший разброс.
В играх все так же, но методы реализации опять разные.
В многих киберспортивных шутерах отдача является вполне предсказуемой и контролируемой вещью, когда остальные игры полагаются скорей на рандом, так как же симулируют отдачу?
Стандартная практика
Как я уже подметил - отдача является импульсом и при различных обстоятельствах разброс от него можно погасить, при этом сам он является рандомным.
Возьмем в пример Battlefield 4 у которой со стрельбой все хорошо :
За ввод и повороты игрока как вводится отвечает мышь или контроллер, входные данные от которых приходят в виде двухмерного вектора с горизонтальным и вертикальным вводом отвечающим за соответствующие направления.
Ручки с пушкой с едва заметной задержкой двигаются за камерой, у них тоже есть свой двухмерный вектор, в котором они находятся относительно камеры.
Предположим есть некоторая переменная, отвечающая за силу разброса, пусть это будет recoilForce. Она увеличивается после каждой пули в очереди и быстро уменьшается если не стрелять.
Во время стрельбы, к двухмерному вектору направления оружия прибавляется другой вектор, в котором два рандомных числа в определенном диапазоне, зависящем от переменной recoilForce и, например, от состояния игрока. Ведь при беге оружие контролировать сложнее - диапазон больше, но лёжа на пузе и глядя в прицел - меньше.
Попробуем вывести формулу, что в ответе и за ввод и за отдачу :
Vec2 drag = Vec2(mouseinput.x , mouseinput.y) + Vec2(Mathf.Random(0,recoilForce), (Math.Random(0,recoildForce)) * playerState - Грубо, но дает понимание. Правда здесь нет той самой задержки, с которой оружие движется за камерой.
Киберспорт в лице CS:GO
На страницах википедии написано, что киберспортивной дисциплиной не суждено быть игре с элементами случайности, тоесть отдачей, ведь она от скилла не зависит... Или зависит?
Оружие из серии Counter Strike популярно тем, что имеет ярко выраженный паттерн разброса для каждого из представителей, чем даже можно воспользоваться...
Рандом все же имеет место быть, но лишь во время активных действий, в остальном работу на себя возлагает предсказуемая переменная/вектор, что в ответе за направление полета следующей пули.
Вообще начать стоило с того, что оружие четко закреплено и движется за камерой, а камера в свою очередь двигается по траектории отдачи. В отличии от вышеописанной Battlefield 4, в которой камера просто смещалась выше, в CS GO камера следует за направлением стрельбы.
Смещение при отдаче происходит не по заранее прописанному вектору для каждой пульки, вероятнее всего у нас так же есть какая-нибудь recoilForce и вектор смещения, что увеличивается на фиксированные для каждого орудия значения.
И, если в бателфилдах и кал оф дюти справиться с отдачей поможет обвес (как и в реальной жизни), то в counter strike лишь умелые маневры мышью в противоположную от смещения сторону, так как напомню - руки четко привязаны к камере.
Всё это очень странно. Лично мне подобная реализация отдачи напоминает деда-боевика с паркинсоном, что после похмелья входит в резонанс с вибрацией оружия и тем самым достигает максимальной кучности стрельбы.
Соседние статьи с канала :
Прицельное фехтование : магия hack'n"slash
Основы инверсной кинематики
Как создают волосы в играх