← Все практические скрипты
Игровая экономика · Уверенный · 35 мин

Монеты и счётчик на экране

Сервер считает монеты, клиент отображает результат.

Иллюстрация: Монеты и счётчик на экране
🎯 Что получится

Сбор монеты увеличивает счёт и обновляет интерфейс.

1. Подготовьте объект

Где разместить: Создайте объекты точно по схеме в инструкции.

Workspace
Coin (Part)
CoinServer (Script)
StarterPlayer
StarterPlayerScripts
CoinHud (LocalScript)
Создайте Anchored Part Coin с CanCollide=false и CanTouch=true. Добавьте Script в Coin. LocalScript разместите в StarterPlayerScripts. Эта практика самостоятельно создаёт Coins, если другие скрипты его ещё не создают.

Карта файлов в Explorer

Это пути для скриптов из блоков кода ниже. Остальные объекты создайте по инструкции.

├── Workspace
│   └── Coin
│       └── CoinServer (Script)
└── StarterPlayer
    └── StarterPlayerScripts
        └── CoinHud (LocalScript)

2. Вставьте код

Workspace/Coin/CoinServer (Script)
local Players = game:GetService("Players")
local coin = script.Parent
local busy = false
local function ensureCoins(player)
    local stats = player:FindFirstChild("leaderstats")
    if not stats then
        stats = Instance.new("Folder")
        stats.Name = "leaderstats"
        stats.Parent = player
    end
    local coins = stats:FindFirstChild("Coins")
    if not coins then
        coins = Instance.new("IntValue")
        coins.Name = "Coins"
        coins.Parent = stats
    end
    return coins
end
coin.Touched:Connect(function(hit)
    local character = hit:FindFirstAncestorOfClass("Model")
    local player = character and Players:GetPlayerFromCharacter(character)
    if not player or busy then return end
    busy = true
    ensureCoins(player).Value += 1
    coin.Transparency = 1
    coin.CanTouch = false
    task.wait(5)
    coin.Transparency = 0
    coin.CanTouch = true
    busy = false
end)
StarterPlayer/StarterPlayerScripts/CoinHud (LocalScript)
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local gui = Instance.new("ScreenGui")
gui.Name = "IgroCoinHud"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")
local text = Instance.new("TextLabel")
text.Size = UDim2.fromOffset(180, 44)
text.Position = UDim2.fromOffset(15, 15)
text.BackgroundColor3 = Color3.fromRGB(25, 40, 70)
text.TextColor3 = Color3.new(1, 1, 1)
text.TextScaled = true
text.Parent = gui
local stats = player:WaitForChild("leaderstats")
local coins = stats:WaitForChild("Coins")
local function update() text.Text = "Монеты: " .. coins.Value end
coins:GetPropertyChangedSignal("Value"):Connect(update)
update()

3. Проверьте в игре

Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.

Ваш прогресс

Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.

Если объединяете несколько скриптов

Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.

⭐ Три шага к собственной игре
1. Повторите и измените

Измените награду с одной монеты на три.

2. Улучшите

Разместите пять монет на уровне.

3. Придумайте своё

Постройте маршрут сборщика сокровищ.

4. Проверьте себя

Какой скрипт изменяет Coins?

🛠 Если не работает

Если у вас уже есть система Coins, оставьте одну систему создания leaderstats. Значение в этой практике не сохраняется после выхода.