본문 바로가기
Learn

Introduction to Saving Data

by Roblox_개발자 2021. 4. 18.

참고

배경색 : 대주제

배경색 : 중주제

배경색 : 공홈 글로만 이해하기 힘들어 추후 확인 후 보완해야 하는 부분.

안녕하세요! 고긴스입니다.

게임을 하다보면 유저의 정보를 영구적으로 저장해야 할 필요가 있습니다. 그 이유는 게임을 플레이하는데 레벨이 유지가 안된다거나 희귀 아이템을 획득했는데 사라져 버리면 안 되기 때문이죠.

오늘은 로블록스에서 data store에 관련하여 어떻게 처리(만들고, 저장하고 읽는 등)하는지 소개글을 보도록 하겠습니다.

 


Enabling Studio Access

기본적으로 스튜디오에서 게임을 테스트할 때는 data store에 접근하지 못하게 되어있습니다. 그러니 이를 가능하도록 설정하도록 하겠습니다.

 

1. Game을 배포합니다. (File → Publish to Roblox)

2. 탭 Home Game Settings window 창을 열어줍시다.

3. Security 섹션에서 Enable Studio Access to API Services를 켜줍시다.

4. 변경사항을 저장해 줍시다.

Creating a Data Store

유저들의 정보를 저장할 Data Store을 만들어 봅시다. Data Store은 유일한 식별값(하나뿐인 이름)을 가져야 합니다.

이번 예시에서는 플레이어의 골드를 영구적으로 저장할 'PlayerGold'라는 Data Store를 만들어 보죠.

 

1. Explorer Window에서 ServerScriptService 에 GoldManager라는 스크립트를 만들어 줍시다.

2. Data Store은 DataStoreService 가 관리합니다. 그러니 이 서비스를 첫 번째 줄에 받아줍시다.

local DataStoreService = game:GetService("DataStoreService")

3. DataStoreService:GetDataStore 를 호출해줍시다. 매개변수에는 Data Store의 유일한 식별 값인 PlayerGold를 넣어줍시다. 이로써 우리는 PlayerGold를 이름을 통해 접근 할 수 있게 됩니다.

local DataStoreService = game:GetService("DataStoreService")
local goldStore = DataStoreService:GetDataStore("PlayerGold")

Saving Data

로블록스의 data store은 근본적으로 사전과 같아요. Lua Table도 이와 같은 방식으로 동작해요. 

아래 예시 사진을 보면 adialor 이라는 단어(데이터)는 3479라는 index(데이터를 찾을 수 있는 key)를 가지게 되죠. 컴퓨터에 데이터 저장 방식과 사전의 차이점이라면 컴퓨터의 데이터 저장 방식은 하나의 data와 index가 1:1로 매칭 한다는 거고 실생활에서 사용하는 사전에는 하나의 index(쪽수)에 여러 단어들이 들어가 있죠. 

사전에 나와 있는 index
컴퓨터에 데이터 저장하는 방법으로 key와 value가 1:1로 매칭되어 있습니다. 

1. 데이터를 저장하기 위해 key, value에 해당하는 변수를 생성해 보죠. key에 해당하는 변수(변수 명: playerUserID)와 

value(변수명 : playerGold)를 다음과 같이 생성해줍시다.

local DataStoreService = game:GetService("DataStoreService")
local goldStore = DataStoreService:GetDataStore("PlayerGold")
 
-- Data store key and value
local playerUserID = 505306092
local playerGold = 250

 2. 넣을 데이터도 준비되었으니 이 데이터를 'PlayerGold'라고 이름 지어준 data store에 저장해봅시다. 이 역할을 해주는 함수 'SetAsync'를 protected call 안에서 호출해 줍시다.

local DataStoreService = game:GetService("DataStoreService")
local goldStore = DataStoreService:GetDataStore("PlayerGold")
 
-- Data store key and value
local playerUserID = 505306092
local playerGold = 250
 
-- Set data store key
local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
end)
if not setSuccess then
    warn(errorMessage)
end

 

❓ protected call 이란?


방금 사용한 함수 'SetAsync' 는 network calls 이란 녀석입니다. 이런 녀석들은 가끔씩 호출하는 걸 실패하는데요. 그래서 실패한 경우에 따로 처리해줘야 해요. 이 역할을 'pcall' (protected call의 약자인듯 하죠😏?)이라는 녀석이 해줍니다.

이 pcall이라는 함수는 다음 두가지 결과를 반환합니다.

1. setSuccess : 함수가 정상 실행한 경우는 True를 그게 아니라면 False를 반환
2. errorMessage : 함수의 값이나 에러 메시지를 반환

앞선 예제를 다시 보시면 setSuccess 가 false인 경우에 errorMessage 를 뜰 띄워주라고 했네요. 그러면 우리가 사용하고자 하는 'SetAsync' 함수가 어느 이유에 실패 했다면 Output window 에 띄워주고 문제를 해결하는 실마리를 얻을 수 있겠네요.

 

❌ 주의 할 점

Data Store에 요청을 너무 자주 보내지 마세요. 데이터 요청을 하게 되면 'queue'(대기열)에서 대기하는데, 대기열이 가득 차면 추가 요청이 삭제된다고 합니다.
🙄 그런데 자주라는 기준이 애매하죠~? 예로 들면 유저가 돈을 얻을 때마다 서버에게 저장하는 것 보다는 어느 정도 시간의 텀을 두던, 아니면 유저가 게임에 나갈 때 돈을 저장하도록 하는게 권장하는 방식이라고 하네요. 

Reading Data

이제 데이터도 저장했겠다. 한번 데이터를 불러오도록 해보죠.

 

1. GetAsync 함수를 호출해서 데이터를 불러봅시다.

local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
end)
if not setSuccess then
    warn(errorMessage)
end
 
-- Read data store key
local getSuccess, currentGold = pcall(function()
    return goldStore:GetAsync(playerUserID)
end)
if getSuccess then
    print(currentGold)
end

2. 한번 테스트 결과를 살펴 봅시다. currentGold라는 변수에 데이터를 받아오게 했으므로 print를 찍으면 아래와 같은 결과물이 나오는 것을 확인할 수 있습니다.

Sample Project

Data Store에 대한 기본 사용법을 알아보았는데요. 아래 샘플 게임을 통해 간단히 테스트를 해봅시다.

www.roblox.com/games/5268331031/Gold-Rush

 

Gold Rush

Roblox에서 제작된 수백만 개의 사용자 제작 3D 콘텐츠 중 하나인 Gold Rush을(를) 살펴보세요. Gather as many gold chunks as you can to set a personal record that will persist between game sessions.

www.roblox.com


의아한 부분이 있다 싶은 공홈이랑 비교해세요! 이상 고긴스였습니다.  

developer.roblox.com/en-us/onboarding/intro-to-saving-data/1

 

Introduction to Saving Data

This Platform uses cookies to offer you a better experience, to personalize content, to provide social media features and to analyse the traffic on our site. For further information, including information on how to prevent or manage the use of cookies on t

developer.roblox.com

 

댓글