Roblox · Интерфейсы
Получил урон — края экрана вспыхивают красным и плавно гаснут. Чем сильнее удар, тем ярче вспышка.
Синим — что нужно создать.
StarterGui └─ DamageFlashGui (ScreenGui) — ResetOnSpawn выкл., IgnoreGuiInset вкл. ├─ Vignette (CanvasGroup) — на весь экран, фон прозрачный │ └─ Edge1–Edge4 (Frame) — красные края с UIGradient └─ DamageFlashLocal (LocalScript) Workspace └─ DamagePart (Part) — плита для проверки └─ HurtScript (Script)
Где: StarterGui → DamageFlashGui · LocalScript
Зачем: Вспышка при потере здоровья.
-- игроки
local Players = game:GetService("Players")
-- плавное затухание
local TweenService = game:GetService("TweenService")
-- этот игрок
local player = Players.LocalPlayer
-- красные края экрана (CanvasGroup)
local vignette = script.Parent:WaitForChild("Vignette")
-- гаснет за 0.6 секунды
local FADE = TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
-- сначала не видно
vignette.GroupTransparency = 1
-- появился персонаж
local function OnCharacter(character)
-- его Humanoid
local humanoid = character:WaitForChild("Humanoid")
-- здоровье до изменения
local last = humanoid.Health
-- здоровье изменилось
humanoid.HealthChanged:Connect(function(health)
-- сколько потеряли
local lost = last - health
-- запоминаем
last = health
-- это лечение
if lost <= 0 then return end
-- сильнее удар — ярче вспышка
local strength = math.clamp(lost / humanoid.MaxHealth * 4, 0.3, 1)
-- вспыхиваем
vignette.GroupTransparency = 1 - strength
-- и плавно гаснем
TweenService:Create(vignette, FADE, {GroupTransparency = 1}):Play()
-- конец функции
end)
-- конец функции
end
-- каждое появление
player.CharacterAdded:Connect(OnCharacter)
-- персонаж уже есть
if player.Character then task.spawn(OnCharacter, player.Character) endГде: Workspace → DamagePart · Script
Зачем: Плита для проверки урона.
-- плита, которая жжётся
local part = script.Parent
-- урон за касание
local DAMAGE = 10
-- не чаще раза в секунду
local COOLDOWN = 1
-- Humanoid → время последнего урона
local last = {}
-- касание
part.Touched:Connect(function(hit)
-- это персонаж?
local humanoid = hit.Parent:FindFirstChildOfClass("Humanoid")
-- нет
if not humanoid then return end
-- недавно уже било
if os.clock() - (last[humanoid] or 0) < COOLDOWN then return end
-- запоминаем
last[humanoid] = os.clock()
-- урон
humanoid:TakeDamage(DAMAGE)
-- конец функции
end)Запусти Play (или Run) и убедись: