SaveUserData
유저 데이터를 서버에 저장하고 불러오는 방법이에요
유저 데이터 타입
서버에 저장&로드할 수 있는 유저 데이터의 타입은 number, string, bool, vector, color, table 이에요. 🚫 단, 한번 정해진 타입은 바꿀 수 없어요. 🚫 vector, color, dataTime, object 타입이 포함된 table 은 저장할 수 없어요.
사용 예제
유저 데이터 불러오기
저장한 플레이어의 데이터를 서버에서 불러와요.
GetSavedUserGameData(플레이어 ID, "Key 값")
💡 클라의 OnEnterPlayer 나 OnSpawnCharacter 이벤트에서 서버의 LoadData 함수를 호출하는 구조로 작성하는 것을 권장해요.
--ClientScript에서
local function EnterPlayer(player)    
    if not player:IsMyPlayer() then
        return
    end
    --서버의 LoadData 함수를 호출해줘요.
    Game:SendEventToServer("LoadData")
end
Game.OnEnterPlayer:Connect(EnterPlayer)--ServerScript에서
local function LoadData(player)
    if player == nil then
        return
    end
    local playerID = player:GetPlayerID()
   
    --데이터를 불러와 gold 변수에 넣어요.
    local gold = Game:GetSavedUserGameData(playerID, "PlayerGold")
    
    --데이터를 불러와 userName 변수에 넣어요.
    local userName = Game:GetSavedUserGameData(playerID, "PlayerUserName")
    
    --데이터를 불러와 questClear 변수에 넣어요.
    local questClear = Game:GetSavedUserGameData(playerID, "PlayerQuestClear")    
    
    --데이터가 없을 경우, 초기화 처리해요.   
    if gold == nil       then gold = 0 end               --number 타입
    if userName == nil   then userName = "None" end      --string 타입
    if questClear == nil then questClear = false end     --bool 타입
    --서버에서 불러온 데이터를 player에게 할당해요.
    player.Gold = gold
    player.UserName = userName
    player.QuestClear = questClear 
end
Game:ConnectEventFunction("LoadData", LoadData)유저 데이터 저장
플레이어의 데이터를 서버에 저장해요.
SaveUserGameData(플레이어 ID, "Key 값", 저장할 value 값)
--ServerScript에서
------------------------------------------------------------
--number 타입
function UpdatePlayerGold(player, gold)
    if player == nil then
        return
    end
    player.Gold = player.Gold + gold
    local playerID = player:GetPlayerID()
    
    --데이터를 서버에 저장해요.
    Game:SaveUserGameData(playerID, "PlayerGold", player.Gold) 
end
Game:ConnectEventFunction("UpdatePlayerGold", UpdatePlayerGold)
------------------------------------------------------------
--string 타입
function UpdatePlayerUserName(player, userName)
    if player == nil then
        return
    end
    player.UserName = userName
    local playerID = player:GetPlayerID()
    
    --데이터를 서버에 저장해요.
    Game:SaveUserGameData(playerID, "PlayerUserName", player.UserName)
end
Game:ConnectEventFunction("UpdatePlayerUserName", UpdatePlayerUserName)
------------------------------------------------------------
--bool 타입
function UpdatePlayerQuestClear(player, questClear)
    if player == nil then
        return
    end
    player.QuestClear = questClear
    local playerID = player:GetPlayerID()
    
    --데이터를 서버에 저장해요.
    Game:SaveUserGameData(playerID, "PlayerQuestClear", player.QuestClear)
end
Game:ConnectEventFunction("UpdatePlayerQuestClear", UpdatePlayerQuestClear)랜드 텔레포트 시, 유저 데이터
연결되어 있는 랜드는 유저 데이터를 서로 공유해요.

-- Start Land에서 
-- "PlayerGold" 라는 Key 값에 데이터를 저장해요.
Game:SaveUserGameData(playerID, "PlayerGold", player.Gold) -- Connect Land에서 
-- Start Land에서 저장했던 데이터를 Connect Land에서도 로드할 수 있어요.
local gold = Game:GetSavedUserGameData(playerID, "PlayerGold")
player.Gold = gold다른 랜드로 텔레포트할 때 휘발성 데이터를 저장하고 싶다면, 아래 내용을 참고해주세요. AddLandTransferData로 저장한 데이터는 월드를 떠나면 사라져요.
AddLandTransferData(”Key 값”, 저장할 value 값)
-- 텔레포트로 이동을 시작하는 랜드에서 작성해요.
local LandOrder = 1
local function TeleportStart(player)
    --해당 랜드에 이동해서 사용할 데이터를 저장해요.
    player:AddLandTransferData("PlayerGold", 1300)
    player:AddLandTransferData("PlayerNickName", "Dito1234")
    print("Teleport Start!")
end
--플레이어가 특정 랜드로 텔레포트 이동을 시작할때 호출되는 함수를 연결해요. 
Game:AddTeleportStartEvent(LandOrder, TeleportStart)-- 텔레포트해서 도착하는 랜드에서 작성해요.
local function TeleportFinish(player, TransferData)
    -- AddLandTransferData 로 설정한 데이터의 개수를 가져오는 방법이에요. 
    print("Teleport Data Count : ", TransferData:DataCount())
    for i, key, value in pairs(TransferData:DataArray()) do
        -- AddLandTransferData 로 설정한 데이터의 Key 값과 Value 값을 가져오는 방법이에요. 
        if key == "PlayerGold"     then player.Gold = value     end
        if key == "PlayerNickName" then player.NickName = value end
    end
end
--텔레포트가 끝났을 때 이전 랜드에서 설정한 데이터를 받을 함수를 연결해요.
Game.OnTeleportFinishEvent:Connect(TeleportFinish) 유의 사항 
테이블의 경우 
table 타입은 BroadcastEvent / SendEventToServer / SendEventToClient 같은 SendEvent에서 전달 인자로 table을 바로 사용할 수 없어요. 따라서 table의 요소를 하나씩 전달해줘야 해요.
예시
local SomeTable = { 10, 52, 31 }
local function Test()
    for i = 1, #SomeTable do
        Game:SendEventToClient(playerID, "SendSomeTableValue", SomeTable[i])
    end
endlocal SomeTable_Client = {}
local function SendSomeTableValue(tableValue)
    table.insert(SomeTable_Client, tableValue)
end
Game:ConnectEventFunction("SendSomeTableValue", SendSomeTableValue)Last updated
Was this helpful?