Select Language
Пятница, 03.05.2024, 16:42
Какого поколения у вас GeForce (если Radeon то поколение конкурента).
Всего ответов: 260


Эффективный радиус действия оружия в 3D Шутере.
25.05.2008, 11:44
Данная статья нацелена, как и предыдущие, на создателей карт к шутерам, но на этот раз, скорее на тех, кто делает карты непосредственно для своего шутера. Хотя, вполне возможно это применить и к уже готовым играм, если это действительно необходимо.
Я опишу метод определения оптимальных размеров комнаты. Следует отметить, что на практике он не использовался и я вообще никак не проверял его, поэтому данная работа носит чисто теоретический характер. Кроме того, коснусь некоторых вопросов балансировки оружия, но только вскользь.
Ну что-ж. Начнем. Итак, есть у вас набор оружия для шутера. Кждое со своими параметрами, но для простоты допустим что этот набор напоминает Кваковский. Вам требуется создать ряд помещений, которые в разной степени дают приемущества в использовании того или иного оружия. Например большой зал с вышкой для снайпера или ряд тесных комнаток для любителя ближнего оружия.
Но тут встает вопрос: "Сколько это "мало" и сколько "много"?" Конкретнее, насколько малое расстояние требуется для любителя шотгана, чтобы он чувствовал себя в своей среде или насколько крупным должен быть зал, чтобы снайпер выбрал его как свое угодье?
Для того, чтобы толком ответить на вопрос, определимся сперва с обозначениями. Hp - это здоровье. Не важно какое, например у игрока Hp=100, а у пули, например Hp=-20. В результате если сложить их, то получится количество здоровья у игрока после взаимодействия с пулей:

Hp1 [Hp] + (-Hp2) [Hp] = HP3 [Hp] \\ В квадратных скобках здесь и далее указана размарность переменных.
Здесь Hp1 - здоровье игрока,
Hp2 - урон пули,
Hp3 - то что осталось у игрока.

Теоретически, будь у пули положительный урон, то она поднимет уровень здоровья игроку, если пользоваться данным методом.
Если у нас всего два параметра оружия (скорострельность и урон), то вполне можно пользоваться следующей формулой для срвнения их характеристик:

-Hp [Hp] * Sr [Выстр/сек] = -Hps [(Hp*выстр)/сек]

Т.е. получается характеристика, показывающая то, какой урон способно нанести оружие за некий интервал времению Секунду брать не обязательно, можно хоть в тиках это все выразить, суть не меняется от этого. Кстати, эта формула показывает еще и то, что скорострельность должна быть более ценным параметром чем сила выстрела. Все дело в том, что если взять интервал времени для автомата и дробовика, то получится что промах из дробовика для всего интервала даст урон 0, в то время как урон при единичном промахе из автомата не будет на всем промежутке равняться нулю, несмотря на то, что все таки он будет меньше чем должен быть при 100% попаданий.
Кроме того, все оружие должно обладать по возможности одинаковым значением урона за единицу времени, чтобы соблядать равнозначность оружия. Хотя это редко соблюдается абсолютно для всего, потому что все таки необходимо сделать те или иные единицы оружия более привлекательными для игрока (БФГ например).
Теперь несколько усложним задачу и добавим в расчет радиус поражения оружия. Механизм влияния радиуса действия оружия на тактику игрока интуитивно понятен. Но вопрос стоит не в вычислении непосредственно предельного радиуса досягаемости оружия. Его и так можно у программиста узнать или даже изменить. Вопрос стоит в вычислении иного радиуса действия. Того, который влияет непосредственно на эффективное применение оружия в конкретной ситуации. Поэтому я его условно называю эффективным радиусом.
Пример. Есть у вас некое подобие винтовки, лучше даже проще - обычный реактивный гранатомет. Ракета его движется после выстрела прямолинейно (что нереально, но часто используется в играх), с конечной скоростью, причем на неограниченное расстояние. Представьте себе, что вы, будучи вооружены только описанным гранатометом, примерно в километре от себя заметили снайпера. Он, естественно вооружен чем то, снаряд которого обладет бесконечной скоростью передвижения, рельсой например (railgun; что по сути тоже нереально и тоже часто используется в играх). Так вот, стрелять по нему из гранатомета в данном случае почти бесполезно. Да, он начнет нервничать, да может не заметить ракет и т.п., но это все ньансы. В данном случае, ваш шанс поразить его с такого расстояния практически равен нулю. В то время как он, пока ваши ракеты в пути, сможет и подстрелить вас и увернуться от выстрела. Так вот, суть в том, что для эффективного использования оружия, подобного гранатомету, т.е. оружия с конечной скоростью движения снаряда, вам требуется чтобы цель находилась в эффективном радиусе поражения данного оружия.
Вообще говоря, параметр эффективного радиуса зависит от многих факторов и в частности от уровня навыков игрока. Тут уже сложно что то сказать, не зная биомеханики человека и психологии, но можно предположить, что для опытного игрока эффективный радиус действия оружия может увеличиваться в широких пределах, начиная от 1.1-1.5 (1,1...1,5 раз больше) для стандартных ситуаций и вплоть до астрономических величин в частных случаях. Эти значения я знаю чисто из опыта, когда видел как в Халфе (HL1)из шотгана или в UT флякой (Flack Cannon) ребята с километра сносили снайпера. Но это только означает что весьма сложно расчитать этот параметр точно, а с прикидкой проблем возникнуть не должно.
Итак, эффективный радиус зависит от скорости полета выстрела оружия:

Reff [м] = Tc [с] * Vu [м/с] ;

Вот, здесь Tc - это временной коэффициент, а Vu - скорость снаряда. Размерности могут быть любыми (километры, миллиметры, юниты и т.д. и т.п.), но они должны быть одинаковыми для всех переменных в расчете, иначе получится каша.
Пару слов о Tc, временном коэффициенте. Это такое максимальное время полета снаряда до цели, при котором человек еще способен более-менее точно расчитать упреждение при прицеливании.
Если более глубоко проанализировать действие эффективного радиуса оружия, то станет ясно, что он неким образом меняется в зависимости еще и от скорости движения игрока. Если игрок будет двигаться с очень большой скоростью, то упреждение будет очень сложно расчитать, а поэтому эффективный радиус оружия уменьшится. Следовательно, скорость игрока важно учесть следующим образом:

Cp = Vp [м/с] / Vu [м/с]

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

Reff [м] = ( Tc [с] * Vu [м/с] ) / Cp

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

Комментарии: 1 | Рейтинг: 4.0/3 | Автор: Zmur

Всего комментариев: 0
Xors3D
Оффициальный сайт Xors3D
Русскоязычный форум
И многое другое!

Locations of visitors to this page


Онлайн: 1
Гостей: 1
Пользователей: 0
© MoKa 2024
Karnao.ru Rubux Software - PhysX Wrapper & Xors3D Blitz3D.at.ua Blitz Et Cetera Boolean Community