Система выносливости добавляет глубину геймплею, ограничивая возможности игрока при длительном беге или выполнении активных действий. Рассмотрим реализацию подобной системы в два этапа: создание графического интерфейса (GUI) и логика управления выносливостью.
Этап 1: Создание индикатора выносливости (StarterGui)
Первым делом создадим интерфейс, отображающий уровень выносливости игрока. Для этого нам понадобится скрипт, размещаемый в папке StarterGui.
Код выглядит следующим образом:
local player = game.Players.LocalPlayer
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "StaminaScreenGui"
screenGui.Parent = player:WaitForChild("PlayerGui")
local staminaBar = Instance.new("TextLabel")
staminaBar.Name = "StaminaBar"
staminaBar.Size = UDim2.new(0, 270, 0, 40)
staminaBar.Position = UDim2.new(0.5, -100, 0.9, 0.5)
staminaBar.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
staminaBar.TextColor3 = Color3.fromRGB(255, 255, 255)
staminaBar.Font = Enum.Font.SourceSansBold
staminaBar.TextSize = 32
staminaBar.Text = "Выносливость: 10/10"
staminaBar.Parent = screenGui
-- Expose staminaBar for other scripts
_G.StaminaBar = staminaBar
Комментарии к первому скрипту:
- Создаем экземпляр ScreenGui и добавляем его в иерархию интерфейсов игрока.
- Устанавливаем размер и положение текстового лейбла, отображающего индикатор выносливости.
- Задаем начальные значения текста и цвета.
- Экспортируем ссылку на лейбл в глобальную таблицу _G, чтобы доступ к нему был доступен из другого скрипта.
Этап 2: Логика выносливости (StarterPlayerScripts)
Второй этап заключается в написании основной логики изменения показателя выносливости и реакции на ускоренный бег игрока. Данный скрипт помещаем в папку StarterPlayerScripts:
local UserInputService = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local normalWalkSpeed = humanoid.WalkSpeed
local sprintWalkSpeed = normalWalkSpeed * 2 -- ускорение движения в 2 раза
local stamina = 20 -- стартовое значение выносливости
local maxStamina = 20 -- максимальное значение выносливости
local isSprinting = false
local canSprint = true
-- Reference to GUI
local staminaBar = nil
local function updateStaminaBar()
if not staminaBar then
local gui = player:FindFirstChild("PlayerGui")
if gui then
staminaBar = gui:FindFirstChild("StaminaScreenGui")
if staminaBar then
staminaBar = staminaBar:FindFirstChild("StaminaBar")
end
end
end
if staminaBar then
staminaBar.Text = "Выносливость: " .. tostring(stamina) .. "/" .. tostring(maxStamina)
end
end
-- Стартуем бесконечный цикл обновления выносливости
spawn(function()
while true do
if isSprinting and canSprint then
if stamina > 0 then
stamina = stamina - 1 -- уменьшаем запас выносливости
updateStaminaBar()
if stamina <= 0 then -- если выносливость закончилась
stamina = 0
canSprint = false -- запрещаем спринт
humanoid.WalkSpeed = normalWalkSpeed
end
end
task.wait(0.1) -- задержка между уменьшением выносливости
else
if stamina < maxStamina then
stamina = stamina + 1 -- восстанавливаем выносливость
updateStaminaBar()
if stamina >= maxStamina then
stamina = maxStamina
canSprint = true -- разрешаем спринт
end
end
task.wait(0.8) -- скорость восстановления выносливости
end
end
end)
-- Реакция на нажатие клавиши Left Shift
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.KeyCode == Enum.KeyCode.LeftShift and not gameProcessed then
if canSprint and stamina > 0 then
isSprinting = true
humanoid.WalkSpeed = sprintWalkSpeed
end
end
end)
-- Отмена спринта при отпускании клавиши Left Shift
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.KeyCode == Enum.KeyCode.LeftShift then
isSprinting = false
humanoid.WalkSpeed = normalWalkSpeed
end
end)
-- Первоначальная инициализация полоски выносливости
updateStaminaBar()
Комментарии ко второму скрипту:
- Используем сервис UserInputService для отслеживания нажатия клавиш.
- При удерживании клавиши Left Shift начинается режим ускорения, при этом уменьшается показатель выносливости.
- После завершения режима спринта игрок возвращается к нормальной скорости передвижения.
- Показатель выносливости автоматически восстанавливается, пока игрок отдыхает.
Итоговые рекомендации по использованию системы выносливости:
- Изменяйте значения переменных sprintWalkSpeed, задержки (task.wait(...)) и максимальных значений выносливости для тонкой настройки поведения вашей системы.
- Используйте визуальные эффекты, анимацию или звуки для подчеркивания моментов истощения или восполнения выносливости.
- Испытайте систему в разных условиях и дополните ее новыми возможностями, такими как замедление движений при низком уровне выносливости или ограничение некоторых способностей при полной усталости.
Данная система легко интегрируется в любые проекты Roblox и позволит добавить реалистичности вашему игровому процессу.
Видео про установку скрипта из этой статьи смотри по ссылке: