В этом уроке мы научимся создавать холодное оружие в Roblox Studio и в качестве примера сделаем лазерный меч. Создать его можно несколькими способами, мы расскажем про каждый из них. Наш звездный меч в Роблокс будет наносить урон, а также издавать звук. Давайте начнем!
Инструкция: как скачать Роблокс Студио на компьютер.

Создание меча
Создаем модель меча. Способ 1
Первый способ — загрузить модель прямо с компьютера. Но не все модели, которые вы сможете найти, будут поддерживаться, есть некоторые ограничения. Формат модели должен быть obj. Кликаем по Baseplate и добавляем MeshPart.











Создаем модель меча. Способ 2
Ну и второй способ — это создать меч с нуля самому. В качестве примера создадим световой меч, его проще всего сделать.
Добавляем цилиндр, задаем ему нужный размер, красим в яркий цвет и выбираем материал Neon.




Lightsaber
Создаем анимацию
Теперь нам нужно создать анимацию. Перейдем во вкладку Plugins и выберем Build Rig. Нажимаем Block Rig, появился манекен. Теперь запустим плагин анимации Animation Editor.

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




Пишем скрипт
Добавление компонентов
Теперь давайте перейдем к программной части, нам нужно добавить два скрипта. Один будет отвечать за произведение атаки, а второй — за нанесение урона. Так и назовем их: Attack и Damage. Для скрипта Attack добавляем анимацию и в ее свойствах вставляем номер анимации.


Вот что получается (даем заметки с объяснениями в конце строк):
local sword = script.Parent -- запоминаем меч
local canDamage = sword.canDamage -- флаг, отвечающая за атаку
local anim = script.Animation -- запоминаем анимацию удара
local cooldown = false -- флаг, отвечающий за кулдаун удара
local sound = Instance.new("Sound", sword) -- создаем объект "звук"
sound.SoundId = "rbxassetid://1647165403" -- указываем id звука
if not sound.IsLoaded then --загружаем звук
sound.Loaded:wait()
end
sword.Activated:Connect(function() -- функция, которая запускается при экипировке меча
if cooldown == false then -- если кулдауна нет, то
sound:Play()
local humanoid = sword.Parent:FindFirstChildWhichIsA('Humanoid') -- запоминаем держателя меча
local loadedAnim = humanoid:LoadAnimation(anim) -- загружаем анимацию
cooldown = true -- ставим кулдаун
loadedAnim:Play() -- запускаем анимацию
canDamage.Value = true -- меняем значение флага
wait(1) -- ждем секунду
loadedAnim:Stop() -- останавливаем анимацию
canDamage.Value = false -- переключаем обратно флаг, чтобы нельзя было снова ударить
cooldown = false -- отключаем кулдаун
end
end)

Теперь пишем скрипт Damage
local hitbox = script.Parent.Hitbox -- загружаем хитбокс
local canDamage = script.Parent.canDamage -- загружаем флаг урона
hitbox.Touched:Connect(function(hit) -- функция, которая запускается при касании мечом объекта
local hum = hit.Parent:FindFirstChildWhichIsA('Humanoid') -- загружаем персонажа
if canDamage.Value then -- если флаг равен истине, то
hum:TakeDamage(25) -- наносим урон в 25 единиц
canDamage.Value = false -- переводим флаг в ложь
end
end)

Проверяем работу.
