Roblox · Анимации
С определённым оружием в руках персонаж бегает по-своему: с винтовкой у груди, с мечом у бедра. Убрал оружие — обычный бег. Вместе со стойкой и перезарядкой из раздела «Оружие» получается полный набор.
Синим — что нужно создать.
StarterPlayer └─ StarterCharacterScripts ├─ WeaponRun (LocalScript) └─ WeaponIdle (LocalScript) — стойка — со страницы «Своя стойка с оружием» StarterPack └─ Rifle (Tool) ├─ Handle (Part) ├─ Run (Animation) — бег с этим оружием ├─ Idle (Animation) — стойка — по желанию └─ GunLocal (LocalScript) — перезарядка — как в разделе «Оружие»
Где: StarterPlayer → StarterCharacterScripts · LocalScript
Зачем: Пока в руках оружие с Run, персонаж бегает и ходит этой анимацией.
-- персонаж (скрипт кладётся в него)
local character = script.Parent
-- стандартный скрипт анимаций
local animate = character:WaitForChild("Animate")
-- обычные ID бега и ходьбы — вернём, когда уберём оружие
local saved = {}
-- оружие, чей бег сейчас включён
local runTool = nil
-- анимация run или walk внутри Animate
local function Anim(name)
-- папка с этим именем
local folder = animate:FindFirstChild(name)
-- анимация в ней или nil
return folder and folder:FindFirstChildOfClass("Animation")
-- конец функции
end
-- вернуть обычный бег
local function Restore()
-- каждый запомненный ID
for name, id in pairs(saved) do
-- его анимация
local anim = Anim(name)
-- возвращаем как было
if anim then anim.AnimationId = id end
-- конец перебора
end
-- больше ничего не помним
saved = {}
-- бега с оружием нет
runTool = nil
-- конец функции
end
-- в персонаже что-то появилось
character.ChildAdded:Connect(function(child)
-- это не оружие
if not child:IsA("Tool") then return end
-- у этого оружия свой бег?
local run = child:FindFirstChild("Run")
-- нет — бег обычный
if not run or not run:IsA("Animation") then return end
-- сначала возвращаем обычный (вдруг было другое оружие)
Restore()
-- бег и ходьба
for _, name in ipairs({"run", "walk"}) do
-- анимация в Animate
local anim = Anim(name)
-- есть
if anim then
-- запоминаем обычную
saved[name] = anim.AnimationId
-- ставим бег оружия
anim.AnimationId = run.AnimationId
-- конец проверки
end
-- конец перебора
end
-- запоминаем оружие
runTool = child
-- конец обработчика
end)
-- из персонажа что-то убрали
character.ChildRemoved:Connect(function(child)
-- убрали это оружие — обычный бег
if child == runTool then Restore() end
-- конец обработчика
end)Запусти Play (или Run) и убедись: