Как создать оружие в Roblox Studio

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

В первую очередь выберите одно из предоставленных ниже оружий (нажмите на ссылку под картинкой):

На странице оружия нажмите зеленую кнопку «Get» и подтвердите транзакцию

Запустите Roblox Studio, откройте вкладку VIEW и активируйте инструменты ToolBox, Explorer и Properties

В панели ToolBox переключитесь на вторую вкладку и нажмите ЛКМ по модели оружия. После чего подтвердите добавление и нажмите « Да» , если хотите, чтобы игроки начали с оружием в рюкзаке, или нажмите « Нет» , чтобы просто поместить оружие в трехмерный мир в качестве предмета

Можете на этом этапе запустить игру и убедиться в том что у Вас получилось добавить оружие в игру.

Если хотите создать более интересное оружие, воспользуйтесь встроенным поиском в панели ToolBox. Переключитесь на первую вкладку и введите в поисковую строку «Weapon» после чего добавьте его в игру аналогичным образом.

Изменение и тонкая настройка оружия

Структура системных папок

Папка WeaponsSystem — это единая папка, содержащая активы, конфигурации и сценарии, которые приводят в действие все одобренное оружие. Если он расположен в ServerScriptService , он переопределяет любые эквивалентные папки WeaponsSystem , которые могут находиться в отдельном оружии.

Папка WeaponsSystem содержит следующие экземпляры :

  • Animations ( Папка ) — хранилище анимаций, используемых в системах вооружения.

  • Casings ( Папка ) — Хранение всех ресурсов гильзы.

  • HitMarks ( Папка ) – хранилище для всех эффектов меток попадания.

  • Shots ( Папка ) – Хранение всех эффектов выстрела.

  • WeaponsSystemGui ( ScreenGui ) — настройки графического интерфейса системы оружия .

Configuration ( Папка) — Значения конфигурации для системы вооружения.

  • SlowZoomWalkEnabled ( BoolValue ) — настройка для управления спринтом .

  • SprintEnabled ( BoolValue ) — настройка для управления спринтом .

Libraries ( папка ) — хранит все остальные ModuleScripts , используемые в оружейной системе.

WeaponTypes ( Папка ) — определяет все типы оружия.

Каждое оружие содержит модель , состоящую из одной или нескольких базовых частей для формирования физического оружия. Один из них должен быть установлен как PrimaryPart модели

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

  • TipAttachment — вложение , положение которого на родительском элементе BasePart определяет, откуда выходят пули/снаряды.

  • HandleAttachment — вложение , положение которого на родительском элементе BasePart определяет место приваривания ручки .

  • Fired (необязательный) — Звук , который воспроизводится при выстреле из оружия.

  • Reload (необязательный) — Звук , который воспроизводится при перезарядке оружия.

Часть Handle определяет, где персонаж игрока держит оружие. Это должен быть Part , он должен называться Handle и быть прямым дочерним элементом оружия (инструмента).

В папке конфигурации вы можете настроить значения для поведения оружия (скорострельность, режим огня, перезарядка, урон, скорость пули, отдачу и т.д.)

Вы можете добавить/изменить следующие параметры для любого оружия. Эти настройки требуют изменения либо Модели оружия , либо Конфигурации оружия , либо того и другого. Некоторые конфигурации зависят от других, таких как Muzzle Particles , которые требуют необходимых дочерних элементов для Projectile/Hit Effects and Sounds .

Затвор оружия — это часть, которая двигается вперед и назад при каждом выстреле.

Оружие может включать физические гильзы от пуль, которые выбрасываются при выстреле и падают на землю.

Эффекты и звуки снарядов/ударов

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

Потомки указанного ShotEffect , отмеченного в предыдущем разделе.

Эта опция создает эффект вспышки луча при выстреле из оружия. Потомки модели:

  • MuzzleFlash0 ( Attachment ) — Используется для указания одной стороны дульного вспышки. Должность не имеет значения.

  • MuzzleFlash1 ( Attachment ) — используется для указания противоположной стороны дульного вспышки. Должность не имеет значения.

  • MuzzleFlash ( Beam ) — обязательно установите для Attach0 значение MuzzleFlash0 , а для Attachment1 значение MuzzleFlash1 .

  • MuzzleFlashTime ( NumberValue ) (необязательный) — продолжительность времени, в течение которого будет отображаться дульное пламя; по умолчанию 0,03 .

  • MuzzleFlashRotation0 ( NumberValue ) (необязательно) — Минимальное вращение дульного луча; по умолчанию -math.pi .

  • MuzzleFlashRotation1 ( NumberValue ) (необязательно) — максимальное вращение дульного луча; по умолчанию это math.pi .

  • MuzzleFlashSize0 ( NumberValue ) (необязательный) — Минимальный размер дульного вспышки; по умолчанию 1 .

  • MuzzleFlashSize1 ( NumberValue ) (необязательный) — Максимальный размер дульного вспышки; по умолчанию 1 .

Эта опция создает след различной длины от оружия до точки попадания снаряда. Потомки конфигурации:

  • TrailLength ( NumberValue ) (необязательно) — Длина следа за пулей/снарядом; значение по умолчанию равно nil , что означает, что длина маршрута вместо этого будет рассчитываться с использованием TrailLengthFactor .

  • TrailLengthFactor ( NumberValue ) (необязательно) — Длина следа будет установлена ​​на это значение, умноженное на расстояние, пройденное пулей/снарядом в последнем кадре; по умолчанию 1 . Обратите внимание, что это будет переопределено, если вы включите TrailLength .

  • ShowEntireTrailUntilHit ( BoolValue ) (необязательно) — установите значение true , чтобы визуализировать след от наконечника оружия до места, где находится снаряд; это переопределит как TrailLength , так и TrailLengthFactor , и след исчезнет только после того, как снаряд во что-то войдет. Установите значение false , чтобы использовать одну из двух вышеперечисленных опций для расчета длины следа. Значение по умолчанию — ложь .

Это визуальное дополнение появляется на поверхности, куда попадают снаряды, и полезно для стрел, пулевых отверстий, подпалин и т. д. Потомки конфигурации:

HitMarkEffect ( StringValue ) (необязательно) — Имя эффекта метки попадания, хранящегося в WeaponsSystem/Assets/Effects/HitMarks ; по умолчанию BulletHole .

AlignHitMarkToNormal ( BoolValue ) (необязательный) — установите значение true , если метка попадания всегда должна располагаться плоско на поверхности, как пулевое отверстие, или false , если метка попадания должна казаться застрявшей в поверхности с направления, откуда прилетел снаряд (например, стрелка). ). По умолчанию верно .

Снаряды могут включать в себя объект взрыва, который наносит урон персонажам игроков в области вокруг точки удара. Потомки конфигурации:

  • ExplodeOnImpact ( BoolValue ) (необязательно) — установите значение true, если вы хотите, чтобы пули/снаряды для оружия взрывались при ударе, в противном случае — значение false Значение по умолчанию — ложь .

  • BlastRadius ( NumberValue ) (необязательно) — BlastRadius взрыва; по умолчанию 8 .

  • BlastPressure ( NumberValue ) (необязательно) — BlastPressure взрыва; по умолчанию 10000

  • BlastDamage ( NumberValue ) (необязательно) — урон, нанесенный вещам в центре взрыва. Обратите внимание, что взрыв наносит меньше урона, чем дальше от центра взрыва находятся пораженные объекты. По умолчанию 100 .

Заряжающееся оружие, такое как Рейльсотрон, должно заряжаться между выстрелами, прежде чем оно снова сможет стрелять. Потомки модели:

  • Charging ( Звук ) (опционально) — воспроизводится во время зарядки оружия.

  • Discharging ( звук ) (необязательно) — воспроизводится во время разрядки оружия, например, если вы только частично зарядите оружие и отпустите кнопку выстрела.

  • ChargeComplete ( Звук ) (необязательно) — воспроизводится, когда оружие полностью заряжено.

  • DischargeComplete ( Звук ) (необязательно) — воспроизводится, когда оружие полностью разряжено.

  • ChargeGlow ( BasePart ) (необязательно) — этот объект будет становиться менее прозрачным по мере зарядки оружия, так что он будет полностью непрозрачным при 100% заряде.

  • ChargeCompleteParticles ( ParticleEmitter ) (необязательно) — испускается, когда оружие закончило зарядку. Этот эмиттер может быть дочерним элементом любой модели BasePart или дочерним элементом Attachment внутри BasePart .

  • DischargeCompleteParticles ( ParticleEmitter ) (необязательно) — испускается, когда оружие полностью разряжается. Этот эмиттер может быть дочерним элементом любой модели BasePart или дочерним элементом Attachment внутри BasePart .

  • ChargingParticles ( ParticleEmitter ) (необязательно) — испускает во время зарядки оружия. Вы можете включить несколько излучателей с таким именем, и каждый из них будет излучать во время зарядки. Этот эмиттер может быть дочерним элементом любой модели BasePart или дочерним элементом Attachment внутри BasePart .

  • ChargeRate ( NumberValue ) — Скорость, с которой оружие будет заряжаться. Это значение необходимо указать, чтобы указать, что оружие использует зарядку.

  • DischargeRate ( NumberValue ) (необязательно) — скорость, с которой оружие будет разряжаться; по умолчанию 0 , что означает, что оружие вообще не будет стрелять.

  • ChargePassively ( BoolValue ) (необязательный) — установите значение true, если вы хотите, чтобы оружие пассивно заряжалось, чтобы оно стреляло мгновенно при нажатии, или false , если вы хотите щелкнуть / коснуться, чтобы зарядить оружие и стрелять, как только будет достигнут полный заряд. . Значение по умолчанию — ложь .

  • ChargingParticlesRatePerCharge ( IntValue ) (необязательно) — количество частиц, которые будут испускаться из всех эмиттеров ChargingParticles , умноженное на текущий заряд оружия. Значение по умолчанию — 20 , что означает, что если заряд оружия составляет 10%, каждый эмиттер ChargingParticles будет испускать 2 частицы (20×0,1), а если заряд оружия равен 90%, каждый эмиттер будет испускать 18 частиц (20×0,9).

  • FireDischarge ( NumberValue ) (необязательно) — количество заряда, которое оружие потеряет после полностью заряженного выстрела; по умолчанию 1 .

  • NumChargeCompleteParticles ( IntValue ) (необязательный) — количество частиц, которые излучатель -ChargeCompleteParticles будет испускать после того, как оружие будет полностью заряжено. По умолчанию 25 .

  • NumDischargeCompleteParticles ( IntValue ) (необязательный) — количество частиц, которые излучатель -DischargeCompleteParticles будет испускать, когда оружие полностью разряжено. По умолчанию 25 .

Луки и арбалеты могут включать в себя реалистичную конструкцию тетивы и оружия, а также визуальную стрелу, прикрепленную к тетиве. В дополнение к добавлению потомков модели необходимо применить следующее:

  • Превратите оружие в зарядное оружие . Например, добавьте необходимый ChargeRate в конфигурацию оружия , который указывает, как быстро вытягивается нить. Кроме того, рассмотрите возможность добавления дополнительных потомков к модели оружия, таких как звук зарядки для тетивы/рук, которые оттягиваются назад.

  • Установите для параметра WeaponType значение BowWeapon , как указано в структуре оружия .

LeftString ( Beam ) (необязательно) — визуальная левая половина строки.

RightString ( Beam ) (необязательно) — визуальная правая половина строки.

Arrow ( BasePart ) (необязательно) — стрелка, которая появляется, когда лук полностью натянут. Обратите внимание, что это только для внешнего вида на луке (фактически выпущенная стрела будет эффектом выстрела , как указано в разделе «Эффекты и звуки снарядов/ударов »).

String1 ( Attachment ) (необязательно) — Центральная точка строки.

StringLoose ( Attachment ) (необязательно) — Точка, где должна быть String1, когда лук находится в состоянии покоя.

StringTight ( Attachment ) (необязательно) — Точка, где должна быть String1 , когда лук полностью натянут.

Arms ( Part ) (необязательно) — часть, которая просто служит внутренним индикатором того, что руки лука будут анимированы. Это может содержать следующие прямые дочерние элементы:

LeftString0 ( Attachment ) (необязательно) — Точка, где левая сторона тетивы прикреплена к луку.

RightString0 ( Attachment ) (необязательно) — Точка, где правая сторона тетивы прикреплена к луку.

LeftLoose ( Attachment ) (необязательно) — точка, где должна быть LeftString0 , когда лук находится в состоянии покоя.

RightLoose ( Attachment ) (необязательно) — точка, где RightString0 должен быть, когда лук находится в состоянии покоя.

LeftTight ( Attachment ) (необязательно) — точка, где должен быть LeftString0 , когда лук полностью натянут.

RightTight ( Attachment ) (необязательно) — точка, где должен быть RightString0, когда лук полностью натянут.

[SpecialMesh] ( SpecialMesh ) (необязательный) — часть лука, которая фактически будет изгибаться при натягивании лука. Обратите внимание, что вы должны указать следующие четыре объекта Vector3Value , чтобы сделать эту анимацию.

LooseOffset ( Vector3Value ) (необязательно) — Смещение SpecialMesh, когда лук находится в состоянии покоя.

TightOffset ( Vector3Value ) (необязательно) — Смещение SpecialMesh , когда лук полностью натянут.

LooseScale ( Vector3Value ) (необязательно) — Масштаб SpecialMesh, когда лук находится в состоянии покоя.

TightScale ( Vector3Value ) (необязательно) — Масштаб SpecialMesh , когда лук полностью натянут.

LargeTouchscreen — это рамка , содержащая кнопки, отображаемые на больших сенсорных экранах. У LargeTouchscreen есть следующие потомки:

  • Кнопка прицеливания ( Кнопка изображения )

  • Кнопка огня ( Кнопка изображения )

Маленький сенсорный экран

SmallTouchScreen — это фрейм , содержащий кнопки, которые отображаются на небольших сенсорных экранах. У SmallTouchscreen есть следующие потомки:

  • Кнопка прицеливания ( Кнопка изображения )

  • Кнопка огня ( Кнопка изображения )

Индикаторы направления используются, чтобы показать направление чего-либо вокруг прицела игрока. Например, если кто-то стреляет в вас, вокруг вашего прицела может появиться красный полукруг в направлении, откуда был произведен выстрел. Другие примеры включают индикаторы, показывающие направление шагов, стрельбу с закрытых позиций или даже объекты окружающей среды, такие как сундуки.

Чтобы создать новый индикатор, добавьте новый индикаторный кадр в WeaponsSystemGui/ScalingElements/DirectionalIndicators со следующей структурой:

После создания вы можете активировать индикатор с помощью следующей команды внутри WeaponsSystem/Libraries/WeaponsGui, где индикаторName — это строковое имя индикатора, который нужно активировать, а worldPos — это позиция в мире, на которую должен указывать индикатор направления:

self.DirectionalIndicatorGuiManager:ActivateDirectionalIndicator(indicatorName, worldPos)

Рекламный щит повреждений используется для отображения небольших чисел над головой персонажа, когда он поврежден. Они будут отображаться только для игрока, который повредил персонажа другого игрока, а не для игроков-наблюдателей.

Рекламные щиты с повреждениями обрабатываются в WeaponsSystem/Libraries/DamageBillboardHandler и могут быть активированы из любого кода на стороне клиента следующим образом, где повреждение — это количество нанесенного урона, а украшение — часть, на которой можно украсить рекламный щит, например, голова жертвы:

DamageBillboardHandler:ShowDamageBillboard(damage, adornmentPart)

Плечевая камера — это камера от третьего лица, которая смотрит через правое плечо персонажа игрока. Чтобы настроить камеру на плече, измените переменные под комментарием — Параметры конфигурации (константы) в функции ShoulderCamera.new() в WeaponsSystem/Libraries/ShoulderCamera . Вы можете изменить такие вещи, как поле зрения, смещение от персонажа, скорость ходьбы во время бега или масштабирования и т. д.

Спринт и управление масштабированием

По умолчанию система оружия добавляет возможность «спринта», поэтому игроки могут бежать, удерживая клавишу Shift , полностью нажимая на динамический стик (мобильный) или полностью нажимая на левый джойстик (геймпад). Если вы хотите отключить спринт, установите для параметра SprintEnabled в WeaponsSystem / Configuration значение false . Система также снижает скорость игрока , когда он прицеливается/приближается, но вы можете отключить это поведение, установив для параметра SlowZoomWalkEnabled значение false .