Как сделать валюту в Роблокс Студио
Пошаговая инструкция по созданию системы валюты в Роблокс Студио. Система валюты будет включать в себя GUI для отображения количества монет у игрока, физические модели монет которые можно подбирать и которые будут спавнится автоматически по заданным координатам, а так же сохранение валюты между сессиями игроков (что бы монеты не терялись при выходе из игры).
Шаг 1: Настройка валюты и сохранения данных
- Откройте Roblox Studio и загрузите свою игру.
- Перейдите в ServerScriptService:
- Щелкните правой кнопкой мыши по ServerScriptService и выберите Insert Object > Script.
- Назовите этот скрипт «
CurrencyManager
«.
- Вставьте следующий код в скрипт:
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
-- Функция при подключении игрока
game.Players.PlayerAdded:Connect(function(player)
-- Создаем leaderstats для отображения валюты
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Создаем переменную для хранения валюты
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0 -- Начальное количество монет
coins.Parent = leaderstats
-- Загружаем сохраненные монеты
local savedCoins = coinsStore:GetAsync(player.UserId)
if savedCoins then
coins.Value = savedCoins
end
end)
-- Сохранение валюты при выходе из игры
game.Players.PlayerRemoving:Connect(function(player)
if player:FindFirstChild("leaderstats") then
local coins = player.leaderstats:FindFirstChild("Coins")
if coins then
coinsStore:SetAsync(player.UserId, coins.Value)
end
end
end)
Шаг 2: Настройка GUI
-
- Щелкните правой кнопкой мыши и выберите Insert Object > ScreenGui.
- Назовите его «
CoinsGui
«.
2. Внутри CoinsGui создайте TextLabel:
-
- Size: {0.2, 0}, {0.1, 0}.
- Position: {0.05, 0}, {0.05, 0}.
- BackgroundTransparency: 1 (чтобы фон был прозрачным).
- TextColor3: (255, 215, 0) — золотистый цвет.
- TextScaled: Включите галочку.
3. Внутри TextLabel добавьте LocalScript и вставьте следующий код:
local player = game.Players.LocalPlayer
local coinsLabel = script.Parent
local function updateCoins()
if player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("Coins") then
coinsLabel.Text = "Coins: " .. player.leaderstats.Coins.Value
end
end
player.leaderstats.Coins:GetPropertyChangedSignal("Value"):Connect(updateCoins)
updateCoins()
LocalScript обновляет текст при изменении количества монет у игрока.
Шаг 3: Создание физической модели монеты
1. В Explorer перейдите в Workspace и добавьте Part:
-
- Shape: Cylinder
- Size: {0.5, 2.5, 3}
- Material: Metal
- Color: золотистый
- Anchored: включить
- CanCollide: отключите
2. Переименуйте Part в «Coin»
3. Щелкните правой кнопкой мыши по Coin и добавьте Script.
4. Вставьте следующий код:
local coin = script.Parent
local hitbox = coin:FindFirstChild("Hitbox") -- Получаем Hitbox
local debounce = false
-- Функция для обработки касания Hitbox
local function onTouch(hit)
if debounce then return end
debounce = true
-- Проверяем, был ли это игрок
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if player and player:FindFirstChild("leaderstats") then
local coins = player.leaderstats:FindFirstChild("Coins")
if coins then
coins.Value = coins.Value + 10 -- Добавляем 10 монет игроку
end
-- Убираем монету после подбора
coin.Anchored = false
coin.CanCollide = false
coin.Transparency = 1
wait(0.1)
coin:Destroy()
end
end
-- Подключаем обработчик касания для Hitbox
if hitbox then
-- Позиционируем Hitbox в центр монеты
hitbox.Position = coin.Position
hitbox.Touched:Connect(onTouch)
end
- onTouch() вызывается при касании монеты игроком.
- Игрок получает 10 монет, после чего монета удаляется.
Шаг 4: Спавн монет в игре
- Переместите созданную монету в ServerStorage
- В ServerScriptService создайте Script и вставьте следующий код:
local coinTemplate = game.ServerStorage:WaitForChild("Coin")
local spawnPoints = {Vector3.new(10, 5, 0), Vector3.new(-10, 5, 0), Vector3.new(0, 5, 10)}
-- Функция для обработки подбора монеты
local function setupHitbox(hitbox, coin)
local debounce = false
local function onTouch(hit)
if debounce then return end
debounce = true
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if player and player:FindFirstChild("leaderstats") then
local coins = player.leaderstats:FindFirstChild("Coins")
if coins then
coins.Value = coins.Value + 10 -- Добавляем 10 монет
end
-- Удаляем монету после подбора
coin.Anchored = false
coin.CanCollide = false
coin.Transparency = 1
wait(0.1)
coin:Destroy()
end
end
hitbox.Touched:Connect(onTouch)
end
-- Функция для спавна монет
local function spawnCoin()
local newCoin = coinTemplate:Clone()
newCoin.Position = spawnPoints[math.random(1, #spawnPoints)] + Vector3.new(0, 2, 0)
newCoin.Anchored = true
newCoin.Parent = workspace
-- Настраиваем Hitbox для новой монеты
local hitbox = newCoin:FindFirstChild("Hitbox")
if hitbox then
setupHitbox(hitbox, newCoin)
end
end
-- Спавн монет каждые 10 секунд
while true do
spawnCoin()
wait(10)
end
- spawnPoints — это координаты, где будут появляться монеты.
- Каждые 10 секунд создаётся новая монета.
Шаг 5: Добавление Hitbox
1. Откройте ServerStorage и выберите вашу монету (
Coin
).
2. Добавьте Part внутрь монеты и настройте его:
-
- Назовите его Hitbox.
- Size: увеличьте размер так, чтобы он был больше самой монеты (например,
{4, 4, 4}
). - Transparency: установите в 1 (чтобы он был невидимым).
- Anchored: включите.
- CanCollide: отключите.
3. Убедитесь, что Hitbox полностью окружает вашу монету! Для этого временно можете переместить Coin в Workspase и отрегулировать положение Hitbox так, что бы он был чуть больше монеты. После чего снова переместить Coin в ServerStorage.
Тестирование
- Нажмите Play в Roblox Studio.
- Проверьте, отображается ли GUI с количеством монет.
- Подберите монеты, чтобы увидеть, как изменяется ваш баланс.
- Убедитесь, что монеты сохраняются после повторного входа в игру.