:DitoLand
Studio ManualAPI ReferenceVideo TutorialSample
  • DitoLand Developer
  • 📚Glossary
  • 🥳EVENT
    • 2024 메타버스 개발자 경진대회
    • 🎊[종료] 🖥 전남관광메타버스 스탬프 투어 인증 이벤트
  • Notice
    • 약관 개정(2024.06.17)
    • 약관 개정 (2024.03.04)
    • 약관 개정 (2023.08.25)
    • 약관 개정 (2022.12.14)
  • Manual
    • Studio
    • Resources
    • Studio Workflow Tips
    • NPC
    • NavMeshVolume
    • Land Teleport
    • Enterprise Account
    • Enterprise Studio Manual
    • Coroutine
    • AddTimeEvent
    • SaveUserData
    • Set Object Parameter
    • Toolbox Upload
    • Debugging (Breakpoint)
    • Gun Toy
    • Coupon / Event Key
    • Optimization
    • AI FSM
    • SpreadSheet
    • Mod Kit
    • AddReplicateValue / ConnectChangeEventFunction
    • Event Execution Order
    • WorldTree Search Filter
    • Object
    • Coordinate
    • Inworld Product
    • Management UserData & Leaderboard
    • Channel
    • World Event
    • Matchmaking
    • Collecting Game Logs
    • External Avatar
  • Coding Style
  • API Reference
    • Global
      • Variables
    • Lua
      • Built-in
      • NotSupport
    • Enums
      • AttachPoint
      • Bone
      • CharacterType
      • ChatCategoryType
      • ChatVisibleType
      • CollisionResponse
      • ControlMode
      • DivideTeamType
      • EventKeyState
      • InputMode
      • InventoryState
      • Key
      • KeyInputType
      • LuckyDrawOrderState
      • MaterialType
      • MediaStateType
      • ModeAnimStateType
      • ObjectSelectType
      • ObjectType
      • PathFollowingStatus
      • PointSpawnType
      • ProgressFillType
      • ProjectionType
      • QuickSlotState
      • ReplicateType
      • ScrollOrientationType
      • SimulatePhysicsType
      • SpawnType
      • TeamType
      • TeleportErrorType
      • TouchType
      • TransformPlayType
      • UIDisplayType
      • UIWidgetType
      • WidgetAnchorType
    • Common
      • BindEvent
      • Character
      • Collision
      • Color
      • CouponReturnData
      • DateTime
      • Environment
      • EventKeyReturnData
      • FactorPhysics
      • FiniteState
      • FiniteStateMachine
      • Game
      • GameStatisticsData
      • HitResult
      • Item
      • LandTransferData
      • Matrix
      • MouseHitResult
      • Object
      • Physics
      • ScriptPhase
      • TimeEvent
      • Track
      • Vector
      • WorldObject
    • Client
      • AnimStateBase
      • AnimStateMachine
      • AnimStateMachineSetting
      • BlendAnimationDataSetting
      • BlendAnimState
      • BlendAnimStateSetting
      • Button
      • Camera
      • CameraClient
      • Character
      • CharacterAnimationSetting
      • CharacterAppearanceSetting
      • CharacterBaseSetting
      • CharacterClient
      • CharacterSetting
      • Collider
      • Collision
      • DPad
      • Environment
      • FiniteStateMachine
      • Frame
      • FX
      • Game
      • GridBox
      • HyperLinkButton
      • Image
      • Input
      • InputGroup
      • InventoryBox
      • Item
      • ListView
      • LocalPlayer
      • Media
      • MediaView
      • NPC
      • ObjectGroup
      • ObjectNoneClient
      • PDFView
      • Physics
      • PointLight
      • ProgressBar
      • RemotePlayer
      • ScreenButton
      • ScreenUI
      • Script
      • ScrollBox
      • SequenceAnimState
      • SequenceAnimStateSetting
      • Sound
      • SpotLight
      • StaticMesh
      • SurfaceUI
      • Text
      • TextBox
      • UIScene
      • WebBrowser
      • WebForum
      • WidgetBase
      • YouTubeView
    • Server
      • Character
      • CharacterAnimationSetting
      • CharacterAppearanceSetting
      • CharacterBaseSetting
      • CharacterServer
      • CharacterSetting
      • Collider
      • Collision
      • Environment
      • FactorPhysics
      • FiniteStateMachine
      • FX
      • Game
      • Item
      • Media
      • NPC
      • Physics
      • Player
      • PointLight
      • Script
      • ScriptObjectGroup
      • ScriptObjectNoneServer
      • Sound
      • Spawner
      • SpawnPoint
      • SpawnPointGroup
      • SpotLight
      • StaticMesh
      • Team
      • UIScene
      • Widget
  • Tutorial
    • Script Tutorial
      • 스크립트 심화 강좌
        • 1. 스크립트의 종류, 호출 순서, 호출, 통신
        • 2. 동기화, 파라미터, 예외사항
        • 3. 디토랜드로 루아 활용하기
  • Sample
    • Scripting
    • Event
    • Collision & Physics
    • Transform
    • UI
    • Camera
    • Input
    • FX
    • Sound
  • Guide for Developers
    • Guide For Unity Developer
    • Guide For Roblox Developer
  • Release Note
    • Script Changes
      • 1.5.0 Map Changes
      • 1.2.0 Map Changes
      • 1.1.0 Map Changes
      • 1.0.0 Map Changes
      • 0.9.0 Map Changes
      • 0.7.0 Map Changes
      • 0.6.0 Map Changes
      • 0.5.0 Map Changes
      • 0.4.0 Map Changes
      • 0.3.0 Map Changes
      • 0.2.0 Map Changes
    • Known Issues
Powered by GitBook
On this page
  • 유저 데이터 타입
  • 사용 예제
  • 유저 데이터 불러오기
  • 유저 데이터 저장
  • 랜드 텔레포트 시, 유저 데이터
  • 유의 사항
  • 테이블의 경우

Was this helpful?

  1. Manual

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
end
local SomeTable_Client = {}

local function SendSomeTableValue(tableValue)
    table.insert(SomeTable_Client, tableValue)
end
Game:ConnectEventFunction("SendSomeTableValue", SendSomeTableValue)
PreviousAddTimeEventNextSet Object Parameter

Last updated 1 year ago

Was this helpful?