Class.DataStoreService를 사용하면 플레이어 인벤토리의 아이템이나 기술 포인트와 같은 세션 간 데이터를 지속해야 하는 데이터를 저장할 수 있습니다. 데이터 저장소는 경험에 대해 일관되게 유지되므로 경험의 任何 장소에서 액세스하고 변경할 수 있습니다.
데이터 저장소에 세분화된 권한 제어를 추가하고 스튜디오 또는 Roblox 서버 외부에서 액세스하려면 Open Cloud APIs for Data Stores를 사용할 수 있습니다.
자주 업데이트하거나 액세스해야 하는 임시 데이터는 메모리 스토어를 사용합니다.
Studio 액세스 활성화
기본적으로 Studio에서 테스트된 경험은 데이터 저장소에 액세스할 수 없기 때문에 먼저 이를 활성화해야 합니다. Studio에서 데이터 저장소에 액세스하면 라이브 경험에 대한 클라이언트 응용 프로그램의 액세스와 동일한 위험이 발생할 수 있습니다. 생산 데이터를 덮어쓰지 않도록
게시된 경험에서 Studio 액세스를 활성화하려면:
- 이동하기 홈 > 게임 설정 > 보안 .
- Enable the Studio 액세스를 API 서비스에 활성화하기 toggle.
- 클릭 저장 .
데이터 저장소에 액세스
경험 내의 데이터 저장소에 액세스하려면:
- 서버 사이드 DataStoreService 에 Script 를 추가합니다.
- Use the GetDataStore() 함수를 사용하고 사용할 데이터 저장소의 이름을 지정합니다. 데이터 저장소가 없는 경우 Studio는 첫 번째로 경험 데이터를 저장할 때 생성합니다.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
데이터 생성
데이터 저장소는 기본적으로 사전과 같은 Lua 테이블과 비슷합니다. 유никаль한 키 인덱스는 데이터 상점각 값에 대해, 예를 들어 사용자의 고유한 Player.UserId 또는 경험 프로모션용 명명된 문자열과 같습니다.
사용자 데이터 키 | 값 |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
프로모션 데이터 키 | 값 |
활성 특별 이벤트 | 여름 파티 2 |
활성 프로모션 코드 | 보너스123 |
파티 장소 액세스 가능 | 참 |
새로운 항목을 생성하려면 SetAsync()를 호출하여 키 이름과 값을 지정하십시오.
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end
데이터 업데이트
데이터 상점저장된 값을 변경하려면 UpdateAsync() 를 호출하여 키 이름과 업데이트를 정의하는 콜백 함수를 전달합니다. 이 콜백은 현재 값을 가져와 로직을 기반으로 업데이트하는 방법을 정의합니다. 콜
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end
업데이트 대 설정
세트를 사용하여 특정 키를 빠르게 업데이트합니다. SetAsync() 함수:
- 두 서버가 동시에 같은 키를 설정하려고 할 경우 데이터 일치가 발생할 수 있습니다.
- 쓰기 제한 카운트에 대해서만 카운트됩니다.
Multi-Server 시도를 처리하기 위해 업데이트를 사용합니다. Class.GlobalDataStore: UpdateAsync()|UpdateAsync() 함수:
- 변경하기 전에 서버에서 현재 키 값을 읽습니다.
- 쓸 때보다 느리게 쓸 수 있습니다
- 읽기 및 쓰기 제한 대수 카운트
데이터 읽기
데이터 저장소 항목의 값을 읽으려면 GetAsync()를 입력 키 이름과 함께 호출합니다.
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end
데이터 증가
데이터 상점정수를 증가하려면 키 이름과 값을 변경할 수 있는 숫자를 입력하여 IncrementAsync() 를 호출합니다. IncrementAsync() 는 편의 함수이므로 값을 수동
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end
데이터 제거
키와 관련된 값을 제거하고 반환하려면 RemoveAsync()를 호출하십시오.
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end
메타데이터
열에 대해 메타데이터 유형이 두 가지가 있습니다.
- 서비스 정의 : 최신 업데이트 시간 및 생성 시간과 같은 읽기 전용 메타데이터. 모든 개체에는 서비스 정의 메타데이터가 있습니다.
- 사용자 정의 : 태그 및 카테고리 지정을 위한 사용자 정의 메타데이터. DataStoreSetOptions 개체 및 Class.DataStoreSetOptions:SetMetric()|SetMetric() 함수를 사용하여 정의됩니다.
메타데이터를 관리하려면 SetAsync() , UpdateAsync() , GetAsync() , 1> Class.GlobalDataStore:IncrementAsync()|IncrementAsync()1> 함수를 확
SetAsync()은 선택적 세 번째 및 네 번째 인수를 수락합니다.
Class.Player.UserId|UserIds 의 테이블. 이것은 콘텐츠 저작권 및 지적 재산 추적 및 제거에 도움이 될 수 있습니다.
Class.DataStoreSetOptions 개체, 여기서 SetMetadata() 함수를 사용하여 사용자 지정 메타데이터를 정의할 수 있습니다.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local setOptions = Instance.new("DataStoreSetOptions")setOptions:SetMetadata({["ExperienceElement"] = "Fire"})local success, errorMessage = pcall(function()experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)end)if not success thenprint(errorMessage)end
GetAsync() , IncrementAsync() 및 RemoveAsync() 은 서비스 정의 속성 및 함수를 사용하여 사용자 정의 메타데이터를 검색합니다. 이 두 값은
- Class.DataStoreKeyInfo:GetUserIds()|GetUserIds() 함수는 다음을 가져옵니다 UserIds 당신이 SetAsync() 에 전달한 테이블.
- Class.DataStoreKeyInfo:GetMetric()|GetMetric() 함수는 사용자가 전달한 사용자 정의 메타데이터를 SetAsync()를 통해 SetMetadata() 에 수집합니다.
- Class.DataStoreKeyInfo.Version|Version 속성은 키의 버전을 가져옵니다.
- Class.DataStoreKeyInfo.CreatedTime|CreatedTime 속성은 키가 생성된 시간을 가져오고, 지점부터 밀리초 수로 형식을 변환합니다.
- Class.DataStoreKeyInfo.UpdatedTime|UpdatedTime 속성은 키가 마지막으로 업데이트된 시간을 가져옵니다, 형식은 에포크 이후의 밀리초 수로 표시됩니다.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local success, currentExperience, keyInfo = pcall(function()return experienceStore:GetAsync("User_1234")end)if success thenprint(currentExperience)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())endClass.GlobalDataStore:UpdateAsync()|UpdateAsync()의 콜백 함수는 현재 키 상태를 설명하는 DataStoreKeyInfo 개체에 추가 매개 변수를 가져옵니다. 수정된 값, UserIds 와 키의 메타데이터를 반환합니다.
local DataStoreService = game:GetService("DataStoreService")local nicknameStore = DataStoreService:GetDataStore("Nicknames")local function makeNameUpper(currentName, keyInfo)local nameUpper = string.upper(currentName)local userIDs = keyInfo:GetUserIds()local metadata = keyInfo:GetMetadata()return nameUpper, userIDs, metadataendlocal success, updatedName, keyInfo = pcall(function()return nicknameStore:UpdateAsync("User_1234", makeNameUpper)end)if success thenprint(updatedName)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())end
메타데이터를 정의할 때 제한 사항은 메타데이터 제한을 참조하십시오.
주문형 데이터 저장소
기본적으로 데이터 저장소는 콘텐츠를 정렬하지 않습니다. 영구 순위 순위표 통계와 같은 순위 순위표 통계를 가져오려면 GetOrderedDataStore() 대신에 GetDataStore() 를 호출합니다.
local DataStoreService = game:GetService("DataStoreService")local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
주문된 데이터 저장소는 기본 데이터 저장소와 동일한 기본 함수를 지원하며, 고유한 GetSortedAsync() 함수가 포함되어 있습니다. 이는 특정 정렬 순서, 페이지 크기 및 최소/최대 값에 따라 여러 개의 정렬된 키를 검색합니다.
다음 예시에서는 캐릭터 데이터를 3개의 항목으로 페이지에 정렬한 다음 페이지를 반복하여 각 캐릭터의 이름과 나이를 출력합니다.
local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- 순서대로 데이터 상점채우기
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- 데이터를 세 개의 항목별로 내리는 순으로 페이지에 정렬합니다.
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- 현재 (첫 번째) 페이지를 가져옵니다.
local entries = pages:GetCurrentPage()
-- 페이지에 있는 모든 키 값 쌍을 반복합니다.
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- 마지막 페이지에 도달했는지 확인합니다.
if pages.IsFinished then
break
else
print("----------")
-- 다음 페이지로 이동
pages:AdvanceToNextPageAsync()
end
end
end