Roblox · Хоррор · урок 4
Пугалки: тень, которая мелькает и исчезает, крик вдалеке, глаза во тьме и резкая картинка на весь экран.
Синим — что добавляем на этом уроке.
Workspace ├─ ShadowTrigger (Part) — невидимая зона │ └─ ShadowTrigger (Script) ├─ Eyes (Model) — два светящихся глаза ├─ EnvironmentTrigger (Part) │ ├─ Footsteps (Sound) — шаги │ └─ EnvironmentTrigger (Script) └─ JumpscareTrigger (Part) ServerStorage └─ Shadow (Model) — тень; внутри Sound SoundService └─ Scream (Sound) — крик ServerScriptService └─ ScreamScript (Script) StarterGui └─ JumpscareGui (ScreenGui) — Enabled выкл., ResetOnSpawn выкл., IgnoreGuiInset вкл. ├─ Face (ImageLabel) — на весь экран ├─ Scream (Sound) └─ JumpscareLocal (LocalScript)
Где: Workspace → ShadowTrigger · Script
Зачем: Тень появляется на 5 секунд.
-- здесь лежит тень
local SS = game:GetService("ServerStorage")
-- игроки
local Players = game:GetService("Players")
-- невидимая зона
local trigger = script.Parent
-- сколько секунд тень стоит
local SHOW_TIME = 5
-- срабатывает один раз за игру
local used = false
-- касание зоны
trigger.Touched:Connect(function(hit)
-- уже было или это не игрок
if used or not Players:GetPlayerFromCharacter(hit.Parent) then return end
-- больше не срабатывает
used = true
-- копия тени — на том месте, где её построили
local shadow = SS:WaitForChild("Shadow"):Clone()
-- появляется
shadow.Parent = workspace
-- звук внутри тени
local sound = shadow:FindFirstChildWhichIsA("Sound", true)
-- шёпот
if sound then sound:Play() end
-- стоит
task.wait(SHOW_TIME)
-- исчезает
shadow:Destroy()
-- конец функции
end)Где: ServerScriptService · Script
Зачем: Крик в случайный момент.
-- звуки отсюда слышат все игроки
local SoundService = game:GetService("SoundService")
-- крик
local scream = SoundService:WaitForChild("Scream")
-- не раньше чем через 45 секунд
local MIN_TIME = 45
-- и не позже чем через 90
local MAX_TIME = 90
-- бесконечно
while true do
-- случайная пауза — нельзя привыкнуть
task.wait(math.random(MIN_TIME, MAX_TIME))
-- крик где-то вдалеке
scream:Play()
-- конец цикла
endГде: Workspace → EnvironmentTrigger · Script
Зачем: Глаза пропадают, слышны шаги.
-- игроки
local Players = game:GetService("Players")
-- зона
local trigger = script.Parent
-- глаза в темноте
local eyes = workspace:WaitForChild("Eyes")
-- шаги
local footsteps = trigger:WaitForChild("Footsteps")
-- один раз
local used = false
-- касание
trigger.Touched:Connect(function(hit)
-- уже было или не игрок
if used or not Players:GetPlayerFromCharacter(hit.Parent) then return end
-- больше не срабатывает
used = true
-- глаза пропали
eyes:Destroy()
-- и кто-то пошёл
footsteps:Play()
-- конец функции
end)Где: StarterGui → JumpscareGui · LocalScript
Зачем: Картинка и крик на 1.5 секунды.
-- игроки
local Players = game:GetService("Players")
-- этот игрок
local player = Players.LocalPlayer
-- JumpscareGui
local gui = script.Parent
-- звук скримера
local scream = gui:WaitForChild("Scream")
-- зона
local trigger = workspace:WaitForChild("JumpscareTrigger")
-- сколько секунд картинка на экране
local SHOW_TIME = 1.5
-- каждый игрок пугается один раз
local used = false
-- касание зоны
trigger.Touched:Connect(function(hit)
-- уже было или это не мы
if used or hit.Parent ~= player.Character then return end
-- больше не срабатывает
used = true
-- картинка на весь экран
gui.Enabled = true
-- крик
scream:Play()
-- держим
task.wait(SHOW_TIME)
-- прячем, но не удаляем
gui.Enabled = false
-- конец функции
end)Запусти Play (или Run) и убедись: