Spiele müssen oft zwischen Sitzungen dauerhafte Daten speichern, wie z. B. das Level eines Spielers, Erfahrungspunkte, Geld, Inventarartikel, Standort und mehr.
Dieses Tutorial zeigt, wie man einen grundlegenden Datenspeicher erstellt, Spielerdaten speichert und die Daten dann in eine Spielsitzung zurückliest.
Studiozugriff aktivieren
Standardmäßig können Spiele, die in Studio getestet werden, nicht auf Datenbanken zugreifen, daher musst du sie zuerst aktivieren:
Veröffentliche das Erlebnis.
Wählen Sie Datei und Spieleinstellungen .
Im Sicherheits -Abschnitt schalten Sie Studio-Zugriff auf API-Dienste aktivieren ein und klicken Sie auf Speichern .
Erstelle einen Datenspeicher
Datenspeicher erfordern einen einzigartigen Namen .Dieses Beispiel erstellt einen Datenspeicher namens PlayerGold , der das Gold eines jeden Spielers in einem dauerhaften Speicher speichert:
Erstellen Sie ein Script innerhalb von ServerScriptService namens GoldManager .
Datenspeicher werden von DataStoreService verwaltet, also holen Sie sich den Service:
local DataStoreService = game:GetService("DataStoreService")Rufen Sie DataStoreService:GetDataStore() mit dem String "PlayerGold" auf.Diese Methode greift auf den PlayerGold -Datenspeicher zu, wenn er bereits existiert.Wenn es nicht existiert, erstellt die Methode einen neuen Datenspeicher und benennt ihn PlayerGold .
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")
Daten speichern
Ein Datenspeicher ist im Wesentlichen ein Wörterbuch, wie eine Luau-Tabelle.Jeder Wert im Datenstore wird von einer einzigartigen Schlüssel indexiert, die der einzigartige des Spielers sein könnte UserId oder einfach eine benannte Zeichenkette für eine Spielpromotion.
Key | Value |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
Um Spielerdaten im Datenlager zu speichern:
Erstelle eine Variable mit dem Namen playerUserID für den Schlüssel des Datenspeichers. Verwende dann playerGold, um die Anfangsmenge an Gold eines Spielers zu speichern.
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- Datenspeicher-Schlüssel und -Wertlocal playerUserID = 505306092local playerGold = 250Um Daten in den PlayerGold Datenstore zu speichern, rufe SetAsync innerhalb eines geschützten Aufrufs auf, indem du die zuvor erstellten Schlüssel- und Wertevariablen übermittelst.
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- Datenspeicher-Schlüssel und -Wertlocal playerUserID = 505306092local playerGold = 250-- Datenspeicherschlüssel festlegenlocal success, error = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not success thenwarn(error)end
Funktionen wie SetAsync() sind Netzwerkaufrufe, die gelegentlich fehlschlagen können.Wie oben gezeigt, wird pcall() verwendet, um solche Fehler zu erkennen und zu behandeln, wenn sie auftreten.
In seiner grundlegendsten Form akzeptiert pcall() eine Funktion und gibt zwei Werte zurück:
- Der Status, der true ist, wenn die Funktion ohne Fehler ausgeführt wird, oder false sonst.
- Der Rückgabewert der Funktion oder eine Fehlermeldung.
Die obige Probeprüfung überprüft den Status in der Zeile 13. Wenn SetAsync() aus irgendeinem Grund fehlschlägt, wird der Fehler im Ausgabe-Fenster angezeigt.
Daten lesen
Um Daten aus einem Datenspeicher zu lesen, rufen Sie GetAsync() mit dem gewünschten Schlüsselnamen auf.
local DataStoreService = game:GetService("DataStoreService")
local goldStore = DataStoreService:GetDataStore("PlayerGold")
-- Datenspeicher-Schlüssel und -Wert
local playerUserID = 505306092
local playerGold = 250
-- Datenspeicherschlüssel festlegen
local setSuccess, errorMessage = pcall(function()
goldStore:SetAsync(playerUserID, playerGold)
end)
if not setSuccess then
warn(errorMessage)
end
-- Lesen Sie den Datenlagerschlüssel
local getSuccess, currentGold = pcall(function()
return goldStore:GetAsync(playerUserID)
end)
if getSuccess then
print(currentGold)
end
Um das Skript zu testen, klicken Sie auf Ausführen und beachten Sie den currentGold, der in das Ausgabe -Fenster gedruckt wird.Beachten Sie, dass es ein paar Sekunden dauern kann, da die Funktionen sich mit Datenbankservern verbinden müssen.
Automatisch lesen und speichern
Das vorherige Skript funktioniert, hat aber ein grundlegendes Problem: Es enthält hart kodierte Werte für playerUserID und playerGold, so dass es keine mehreren Spieler mit unterschiedlichen Mengen Gold unterstützt.Eine realistischere Lösung liest den Goldwert, wenn der Spieler sich mit dem Erlebnis verbindet und speichert ihn dann, wenn der Spieler geht.Dieser Ansatz bedeutet, die Datenlagerschaltungen mit Ereignissen vom Players zu verbinden.
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local goldStore = DataStoreService:GetDataStore("PlayerGold")
-- Füge Goldwerte für jeden Spieler zu einer lokalen Tabelle hinzu, um die Daten nicht zu treffen
-- wiederholt speichern.
local playerGold = {}
local function incrementGold(player, amount)
playerGold[player.UserId] += amount
end
local function onPlayerAdded(player)
-- Lesen Sie den Datenlagerschlüssel
local success, storedGold = pcall(function()
return goldStore:GetAsync(player.UserId)
end)
if success then
local currentGold
if storedGold then
currentGold = storedGold
else
currentGold = 0
end
playerGold[player.UserId] = currentGold
print(currentGold)
end
-- Test-Erhöhung von Gold
incrementGold(player, 5)
end
local function onPlayerRemoving(player)
-- Datenspeicherschlüssel festlegen
local success, err = pcall(function()
goldStore:SetAsync(player.UserId, playerGold[player.UserId])
end)
if not success then
warn(err)
end
-- Reinigen Sie den Eintrag, damit die Tabelle während der Lebensdauer des Servers nicht wächst
playerGold[player.UserId] = nil
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
Lesen und speichern der Zeichenposition
Um die Spielerposition zu speichern, arbeiten Sie mit dem Character anstatt mit dem Player, aber der Prinzip ist ähnlichDieses Mal erstellen Sie ein Script innerhalb von ServerScriptService, das als PositionManager bezeichnet wird:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local Workspace = game:GetService("Workspace")
local playerPositionStore = DataStoreService:GetDataStore("PlayerPositionStore")
local function positionHandler(player)
-- Ladeposition beim Hinzufügen eines Charakters
player.CharacterAdded:Connect(function(character)
local success, coords = pcall(function()
return playerPositionStore:GetAsync(player.UserId)
end)
local position = Vector3.new(coords[1], coords[2], coords[3])
if success and position then
character:PivotTo(CFrame.new(position))
print("Loaded player position!")
else
warn("Failed to load position for player " .. player.Name .. ". Placing in default position.")
end
-- Spielerrespawn beim Tod verwalten
local humanoid = character:FindFirstChildOfClass("Humanoid")
humanoid.Died:Connect(function()
local spawnLocation = Workspace:FindFirstChild("SpawnLocation")
character:PivotTo(spawnLocation.CFrame)
end)
end)
-- Position bei Charakterentfernung speichern
player.CharacterRemoving:Connect(function(character)
local position = character:GetPivot().Position
local success, err = pcall(function()
playerPositionStore:SetAsync(player.UserId, {position.X, position.Y, position.Z})
print("Saved player position!")
end)
if not success then
warn("Failed to save position for player " .. player.Name .. ": " .. err)
end
end)
end
Players.PlayerAdded:Connect(positionHandler)
Dieses Skript fügt einen neuen Datenspeicher hinzu, playerPositionStore.Da Datenbanken nur grundlegende Arten speichern und nicht Objekte, musst du X, Y und Z-Koordinaten als einzelne Zahlen speichern, anstatt einen einzigen Vector3 oder CFrame Wert.Während Sie Ihr Erlebnis testen, bewegen Sie Ihren Charakter herum.Beachte, wie dein Charakter zur gleichen Position zurückkehrt, wenn du deine Erfahrung das nächste Mal testest.
Beispielprojekt
Jetzt, da du die grundlegende Nutzung des Datenspeichers verstanden hast, teste es im Goldrausch-Probespiel.Du kannst das Spiel auch im Studio bearbeiten und das verbesserte GoldManager -Skript erkunden, das Gold als Teil der Benutzeroberfläche anzeigt und automatisches Speichern enthält.