Roblox · Хоррор · урок 3
Shift — бег, C — присесть. Скорость меняется всегда, а свои анимации бега и приседа можно добавить, если они у тебя есть.
Синим — что добавляем на этом уроке.
StarterPlayer └─ StarterCharacterScripts — скрипты кладутся в каждого персонажа ├─ RunScript (LocalScript) │ └─ RunAnim (Animation) — AnimationId — по желанию └─ CrouchScript (LocalScript) └─ CrouchAnim (Animation) — AnimationId — по желанию
Где: StarterPlayer → StarterCharacterScripts · LocalScript
Зачем: Бег на Shift.
-- клавиатура
local UIS = game:GetService("UserInputService")
-- скрипт лежит в персонаже
local character = script.Parent
-- Humanoid
local humanoid = character:WaitForChild("Humanoid")
-- проигрывает анимации
local animator = humanoid:WaitForChild("Animator")
-- скорость бега
local RUN_SPEED = 25
-- обычная скорость
local WALK_SPEED = 16
-- Animation внутри скрипта
local runAnim = script:WaitForChild("RunAnim")
-- дорожка анимации (если есть своя)
local runTrack = nil
-- ID вставлен
if runAnim.AnimationId ~= "" then
-- загружаем
runTrack = animator:LoadAnimation(runAnim)
-- важнее обычной ходьбы
runTrack.Priority = Enum.AnimationPriority.Movement
-- по кругу
runTrack.Looped = true
-- конец проверки
end
-- сейчас бежим?
local running = false
-- включает и выключает анимацию бега
local function UpdateAnim()
-- своей анимации нет — бежим стандартной
if not runTrack then return end
-- персонаж двигается
local moving = humanoid.MoveDirection.Magnitude > 0
-- бежим, а анимация не играет
if running and moving and not runTrack.IsPlaying then
-- включаем плавно
runTrack:Play(0.2)
-- остановились
elseif (not running or not moving) and runTrack.IsPlaying then
-- выключаем
runTrack:Stop(0.2)
-- конец проверки
end
-- конец функции
end
-- начать или закончить бег
local function SetRunning(value)
-- погибшие не бегают
if humanoid.Health <= 0 then return end
-- сидим? (ставит скрипт приседания)
local crouching = character:GetAttribute("Crouching")
-- сидя не бегаем
running = value and not crouching
-- скоростью сидя управляет другой скрипт
if not crouching then
-- бег или шаг
humanoid.WalkSpeed = running and RUN_SPEED or WALK_SPEED
-- конец проверки
end
-- анимация
UpdateAnim()
-- конец функции
end
-- нажали клавишу
UIS.InputBegan:Connect(function(input, processed)
-- левый Shift, и не в чате
if not processed and input.KeyCode == Enum.KeyCode.LeftShift then
-- бежим
SetRunning(true)
-- конец проверки
end
-- конец функции
end)
-- отпустили клавишу
UIS.InputEnded:Connect(function(input)
-- это Shift
if input.KeyCode == Enum.KeyCode.LeftShift then
-- идём шагом
SetRunning(false)
-- конец проверки
end
-- конец функции
end)
-- встали или пошли — обновляем анимацию
humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(UpdateAnim)
-- присели во время бега
character:GetAttributeChangedSignal("Crouching"):Connect(function()
-- бег прекращается
if character:GetAttribute("Crouching") then SetRunning(false) end
-- конец функции
end)Где: StarterPlayer → StarterCharacterScripts · LocalScript
Зачем: Присед на C.
-- клавиатура
local UIS = game:GetService("UserInputService")
-- персонаж
local character = script.Parent
-- Humanoid
local humanoid = character:WaitForChild("Humanoid")
-- анимации
local animator = humanoid:WaitForChild("Animator")
-- скорость сидя
local CROUCH_SPEED = 6
-- обычная скорость
local WALK_SPEED = 16
-- Animation внутри скрипта
local crouchAnim = script:WaitForChild("CrouchAnim")
-- дорожка анимации
local track = nil
-- своя анимация есть
if crouchAnim.AnimationId ~= "" then
-- загружаем
track = animator:LoadAnimation(crouchAnim)
-- поверх ходьбы и стояния
track.Priority = Enum.AnimationPriority.Action
-- по кругу
track.Looped = true
-- конец проверки
end
-- сидим?
local crouching = false
-- нажали клавишу
UIS.InputBegan:Connect(function(input, processed)
-- нужна C и не в чате
if processed or input.KeyCode ~= Enum.KeyCode.C then return end
-- погибшие не приседают
if humanoid.Health <= 0 then return end
-- C переключает: сесть / встать
crouching = not crouching
-- сообщаем скрипту бега
character:SetAttribute("Crouching", crouching)
-- сели
if crouching then
-- медленно
humanoid.WalkSpeed = CROUCH_SPEED
-- камера ниже — видно и без анимации
humanoid.CameraOffset = Vector3.new(0, -1.5, 0)
-- анимация приседа
if track then track:Play(0.2) end
-- встали
else
-- обычная скорость
humanoid.WalkSpeed = WALK_SPEED
-- камера на место
humanoid.CameraOffset = Vector3.zero
-- выключаем анимацию
if track then track:Stop(0.2) end
-- конец проверки
end
-- конец функции
end)Запусти Play (или Run) и убедись: