DataModel

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

만들 수 없음

데이터 모델(일반적으로 게임이라고 함)은 Roblox의 부모-자식 계층의 뿌리입니다. 그것의 직접적인 자식은 서비스, 예를 들어 gameWorkspace 입니다.이는 게임의 기본 구성 요소입니다.

코드 샘플

GetService()

local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Examples of modifying properties of these services
Workspace.Gravity = 20
Lighting.ClockTime = 4

요약

속성

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    플레이스소유하고 있는 사용자 또는 그룹의 ID를 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    장소가 사용자 또는 그룹이 소유하는지 여부에 관계없이 플레이스Enum.CreatorType를 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    서버에서 실행되는 장소의 ID를 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기
    사용되지 않음

    기능하지 않습니다. 이전에 Roblox 웹 사이트에서 Enum.Genre 를 설정한 장소를 설명했습니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    실행 게임 서버 인스턴스에 대한 고유한 식별자.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    서버에서 실행 중인 장소의 ID를 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    서버가 실행 중인 장소의 버전을 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    서버가 개인 서버인 경우 서버의 개인 서버 ID를 설명합니다. Class.TeleportService:ReserveServer()|reserved server 이면.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    서버가 비공개서버인 경우 UserId 의 소유인 Player 를 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    Class.Workspace 서비스에 대한 참조.

메서드

  • BindToClose(function : function):void

    서버가 종료되기 전에 호출할 함수를 바인딩합니다.

  • 플러그인 보안

    작업 일정 관리자가 수행하는 작업에 대한 기본 정보를 포함하는 테이블을 반환합니다.Returns a table containing basic information about the jobs performed by the task scheduler.

  • GetObjects(url : ContentId):Instances
    플러그인 보안
    사용되지 않음

    지정된 콘텐츠 URL과 연관된 Instances 배열을 반환합니다.

  • 클라이언트가 게임을 처음 로드할 때 클라이언트가 완료하면 반환합니다.

  • SetPlaceId(placeId : number):void
    플러그인 보안

    현재 게임 인스턴스의 DataModel.PlaceIdplaceId로 설정합니다.

  • SetUniverseId(universeId : number):void
    플러그인 보안

    현재 게임 인스턴스의 DataModel.GameIduniverseId로 설정합니다.

메서드ServiceProvider에서 상속되었습니다
  • 병렬 쓰기

    지정된 키워드가 이미 생성된 경우 지정된 키워드를 사용하는 서비스를 반환합니다. 잘못된 이름에 대한 오류가 발생합니다.

  • 요청된 클래스 이름으로 서비스를 반환하며, 존재하지 않는 경우 생성합니다.

이벤트

이벤트ServiceProvider에서 상속되었습니다

속성

CreatorId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 플레이스소유자인 사용자 또는 그룹의 ID를 설명합니다. DataModel.CreatorType 속성이 사용자 인 경우 크리에이터Id는 플레이스소유자인 그룹의 Class.Player.UserId</

코드 샘플

Detect when the place owner joins the game

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("The place owner has joined the game!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroup(game.CreatorId) then
print("A member of the group that owns the place has joined the game!")
end
end
end)

CreatorType

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 플레이스사용자 또는 그룹이 소유하는지 여부에 관계없이 장소의 Enum.CreatorType를 설명합니다.

만약 Enum.CreatorType 속성이 *'사용자'*라면, DataModel.CreatorId 의 계정 소유자의 게임에 대한 1> Class.Player.Player.Player1> 의 설명을 읽을 수 있습니다. 만약 4> Class.CreatorType

코드 샘플

Detect when the place owner joins the game

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("The place owner has joined the game!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroup(game.CreatorId) then
print("A member of the group that owns the place has joined the game!")
end
end
end)

GameId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 서버에서 실행되는 장소가 속한 경험의 ID를 설명합니다.

이 ID는 Roblox Studio의 자산 관리자 옆 오른쪽 모서리에서 찾을 수 있습니다. 이 때 Roblox Studio를 사용하는 경우, 장소가 Roblox에 게시되지 않은 경우 GameId는 사용 중인 템플릿과 일치합니다.

또한 참조하십시오.

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 잘못되었으므로 사용하지 마십시오.

이 속성은 Roblox 웹 사이트에 설정된 Enum.Genre를 기술적 설명합니다.

이 속성과 DataModel.GearGenreSetting 은 Roblox 웹 사이트의 장르가 더 이상 반영되지 않기 때문에 더 이상 올바르게 작동하지 않습니다. 결과적으로 이 속성을 읽으려면 오류가 발생할 수 있습니다.

JobId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 실행 게임 서버 인스턴스에 대한 고유한 식별자입니다. 이는 모든 서버(현재 서버 포함)에 대해 항상 고유한 식별자(Unique Unique Identifier)이며, 두 서버 모두 이전 서버에서 나온 것이 아닙니다.

Studio의 빈 문자열에 대한 기본값입니다.

또 보기

PlaceId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 서버에서 실행되는 장소의 ID를 설명합니다.

장소가 Roblox에 게시된 경우 Studio의 자산 관리자에서 장소를 마우스 오른쪽 버튼으로 클릭하고 클립보드에 ID 복사를 선택하면 이 ID를 찾을 수 있습니다.

장소가 Roblox에 게시되지 않은 경우, 이 ID는 사용되는 템플릿과 일치합니다.

또 보기

PlaceVersion

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 서버가 실행되는 장소의 버전을 설명합니다.

이 버전 번호는 장소 설정의 버전 기록 섹션에 표시된 버전 번호와 일치합니다. 이 속성은 모든 미게시된 경험에 대해 0입니다.

서버 인스턴스가 플레이스생성되면 해당 플레이스현재 버전을 사용합니다. 이 서버가 실행되는 동안 장소가 업데이트되면 서버는 현재 버전으로 유지됩니다.

이 속성은 디버깅을 보조하기 위해 ScreenGui에 게임의 현재 버전을 표시하는 Players를 표시하는 데 사용할 수 있습니다.

코드 샘플

Server version number GUI

local StarterGui = game:GetService("StarterGui")
local versionGui = Instance.new("ScreenGui")
local textLabel = Instance.new("TextLabel")
textLabel.Position = UDim2.new(1, -10, 1, 0)
textLabel.AnchorPoint = Vector2.new(1, 1)
textLabel.Size = UDim2.new(0, 150, 0, 40)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.TextXAlignment = Enum.TextXAlignment.Right
textLabel.TextScaled = true
local placeVersion = game.PlaceVersion
textLabel.Text = string.format("Server version: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGui

PrivateServerId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 서버가 개인 서버인 경우 서버의 ID를 설명합니다.

서버가 개인 서버가 아닌 경우 이 속성은 비어 있는 문자열이 됩니다.

개인 서버

개인 서버는 팔로잉참조합니다.

PrivateServerId vs JobId

서버의 PrivateServerId는 DataModel.JobId 와 다릅니다. JobId 는 현재 서버 인스턴스의 고유 식별자입니다.

Private 서버(개인 또는 예약된 서버)는 시간이 지남에 따라 여러 개의 서버 인스턴스를 가질 수 있습니다. 이는 하나의 서버 인스턴스만 동시에 실행할 수 있기 때문입니다. 예를 들어, 아무도 서버에 플레이하지 않으면 개인

또한 참조하십시오.

코드 샘플

Detecting Private Servers

local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "ReservedServer"
end
else
return "StandardServer"
end
end
print(getServerType())

PrivateServerOwnerId

읽기 전용
복제되지 않음
병렬 읽기

이 속성은 서버가 비공개서버인 경우 UserIdPlayer 를 설명합니다.

서버가 표준 또는 예약된 서버인 경우 이 속성은 0로 설정됩니다.

이 속성은 Player 가 개인 서버의 소유자인지 여부를 식별하는 데 사용할 수 있습니다. 예를 들어:


local Players = game:GetService("Players")
-- 이 서버는 개인 서버입니까?
if game.PrivateServerId ~= "" and game.PrivateServerOwnerId ~= 0 then
-- 새로운 플레이어가 추가되는 것을 듣기
Players.PlayerAdded:Connect(function(player)
-- 플레이어가 서버 소유자인지 확인하십시오
if player.UserId == game.PrivateServerOwnerId then
print("The private server owner has joined the game")
end
end)
end

또한 참조하십시오.

코드 샘플

Detecting Private Servers

local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "ReservedServer"
end
else
return "StandardServer"
end
end
print(getServerType())

Workspace

읽기 전용
복제되지 않음
병렬 읽기

작업 공간 속성은 Workspace 서비스를 참조합니다.

이 속성은 항상 Workspace로 포인트하며 결코 nil가 아닙니다.

Class.Workspace 는 또한 global 변수 workspaceServiceProvider:GetService() 함수를 사용하여 액세스할 수 있습니다. 예를 들어:


workspace -- 전역 변수
game.Workspace -- DataModel(게임)의 속성
game:GetService("Workspace") -- workspace is a service

메서드

BindToClose

void

서버가 종료되기 전에 호출할 함수를 바인딩합니다. 바인딩된 함수에 매개 변수가 있으면 서버가 종료되는 이유에 대해 Enum.CloseReason 패스를 전달합니다.

Class.DataModel:BindToClose()|BindToClose() 를 반복하여 여러 함수를 바인딩할 수 있습니다. 바인딩된 함수는 병렬로 호출되고 동시에 실행됩니다.

경험 서버는 종료되기 전에 모든 바인딩된 함수가 실행을 중지하도록 30초 기다립니다. 30초 후에는 서버가 여전히 실행되지만 함수가 여전히 실행되는 경우에도 서버가 종료됩니다.

현재 세션이 Roblox Studio에 있지 않은지 확인하려면 RunService:IsStudio() 를 사용하십시오. 이렇게 하면 온라인 테스트 세션에서 바인딩된 함수를 완료할 수 없습니다.

Class.DataStoreService 를 사용할 때 BindToClose 를 사용하여 모든 미저장된 데이터를 DataStores 로 바인딩해야 합니다. 이렇게 하면 서버가 예기치 않게 종료되더라도 데이터 손실이 방지됩니다.

또한 참조하십시오.

매개 변수

function: function

경험 서버가 종료될 때 호출되는 함수입니다. 바인딩된 함수가 매개 변수를 수락하면 서버 종료의 이유를 지정하는 Enum.CloseReason을 반환합니다.


반환

void

코드 샘플

Saving player data before shutting down

local DataStoreService = game:GetService("DataStoreService")
local RunService = game:GetService("RunService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
local allPlayerSessionDataCache = {}
local function savePlayerDataAsync(userId, data)
return playerDataStore:UpdateAsync(userId, function(oldData)
return data
end)
end
local function onServerShutdown(closeReason)
if RunService:IsStudio() then
-- Avoid writing studio data to production and stalling test session closing
return
end
-- Reference for yielding and resuming later
local mainThread = coroutine.running()
-- Counts up for each new thread, down when the thread finishes. When 0 is reached,
-- the individual thread knows it's the last thread to finish and should resume the main thread
local numThreadsRunning = 0
-- Calling this function later starts on a new thread because of coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Perform the save operation
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Could implement a retry
warn(string.format("Failed to save %d's data: %s", userId, result))
end
-- Thread finished, decrement counter
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- This was the last thread to finish, resume main thread
coroutine.resume(mainThread)
end
end)
-- This assumes playerData gets cleared from the data table during a final save on PlayerRemoving,
-- so this is iterating over all the data of players still in the game that hasn't been saved
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- This loop finishes running and counting numThreadsRunning before any of
-- the save threads start because coroutine.wrap has built-in deferral on start
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Stall shutdown until save threads finish. Resumed by the last save thread when it finishes
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)
Binding to and Handling Game Shutdown

game:BindToClose(function(closeReason)
print(`Closing with reason {closeReason}`)
task.wait(3)
print("Done")
end)

GetJobsInfo

플러그인 보안

작업 일정 관리자가 수행하는 작업에 대한 기본 정보를 포함하는 테이블을 반환합니다.Returns a table containing basic information about the jobs performed by the task scheduler.

컴퓨팅에서 작업 일정 관리자는 적절한 간격으로 키 작업을 실행하는 시스템입니다.

Roblox Studio의 태스크 스케쥴러 창에서 실시간 작업 일정 관리자 통계를 찾을 수도 있습니다.

테이블에 있는 첫 번째 항목은 사용 가능한 통계(또는 헤드링)가 포함된 참조 사전입니다. 다음과 같은 형식입니다.


{
["name"] = "name",
["averageDutyCycle"] = "averageDutyCycle",
["averageStepsPerSecond"] = "averageStepsPerSecond",
["averageStepTime"] = "averageStepTime",
["averageError"] = "averageError",
["isRunning"] = "isRunning",
}

작업 일정 관리자가 수행하는 작업에 대한 위의 통계를 포함하는 다음 항목은 사전입니다. 예를 들어:


{
["name"] = "Heartbeat",
["averageDutyCycle"] = 0,
["averageStepsPerSecond"] = 0,
["averageStepTime"] = 0,
["averageError"] = 0,
["isRunning"] = false,
}

또한 참조하십시오.


반환

작업 일정 관리자가 수행하는 작업에 대한 정보를 포함하는 테이블, 위에서 형식을 참조하십시오.

코드 샘플

Getting Jobs Info

local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("JOB INFO:")
print(divider)
for _, job in pairs(jobInfo) do
for jobIndex, jobValue in pairs(job) do
local jobTitle = jobTitles[jobIndex]
warn(jobTitle, "=", jobValue)
end
print(divider)
end

GetObjects

Instances
플러그인 보안

이 메서드는 지정된 콘텐츠 URL과 연관된 Instances 배열을 반환합니다. Roblox 라이브러리에서 콘텐츠를 삽입하는 데 사용할 수 있습니다. 이 메서드을 사용하여 Roblox 라이브러리에 있는 콘텐츠를 삽

Class.InsertService:LoadAsset() 와는 달리, DataModel:GetObjects() 는 자산을 "신뢰할 수 있게" 하려는 자산이 아니라면 자산을 삽입할 필요가 없습니다. 즉, 로그인된 사용자가 소유하거나 Roblox가 생성한 자산이 아닌 자산을 삽입하려면 자산을

이 함수의 보안 컨텍스트 때문에 플러그인이나 명령 바만 사용할 수 있습니다. ScriptsLocalScripts 에서 대체 사용할 수 있는 옵션은 Class.InsertService:LoadAsset() 입니다.

매개 변수

url: ContentId

지정된 콘텐츠 URL.


반환

Instances

콘텐츠 URL과 연관된 Instances 배열.

코드 샘플

View a plugin's source code

local Selection = game:GetService("Selection")
local WEB_URL = "plugin URL here"
local function downloadPlugin(webURL)
-- get the content URL
local contentID = string.match(webURL, "%d+")
local contentURL = "rbxassetid://" .. contentID
-- download the objects
local objects = game:GetObjects(contentURL)
-- decide where to parent them
local selection = Selection:Get()
local parent = #selection == 1 and selection[1] or workspace
-- parent the objects
for _, object in pairs(objects) do
object.Parent = parent
end
end
downloadPlugin(WEB_URL)
Batch convert decal IDs

local IMAGES = {
-- Insert Decal web URLs in an array here (as strings)
}
-- open the dictionary
local outputString = "textures = {"
-- utility function to add a new entry to the dictionary (as a string)
local function addEntryToDictionary(original, new)
outputString = outputString
.. "\n" -- new line
.. " " -- indent
.. '["'
.. original
.. '"]' -- key
.. ' = "'
.. new
.. '",' -- value
end
print("Starting conversion")
for _, webURL in pairs(IMAGES) do
-- get the content URL
local contentID = string.match(webURL, "%d+")
local contentURL = "rbxassetid://" .. contentID
local success, result = pcall(function()
local objects = game:GetObjects(contentURL)
return objects[1].Texture
end)
if success then
addEntryToDictionary(webURL, result)
else
addEntryToDictionary(webURL, "Error downloading decal")
end
task.wait()
end
print("Conversion complete")
-- close the dictionary
outputString = outputString .. "\n}"
-- print the dictionary
print(outputString)

IsLoaded

이 함수는 클라이언트가 처음으로 게임을 로드할 때 클라이언트가 게임을 로드한 것을 반환합니다.

게임의 모든 초기 Instances가 클라이언트에 복제되면 이 함수는 true를 반환합니다.

Class.ReplicatedFirst 에 부모로 지정되지 않으면, LocalScripts 은 게임이 로드되지 않은 동안 실행되지 않습니다. 다음 스냅 코드는 LocalScript 에서 실행되었습니다. 1>Class.ReplicatedFirst1> 에 부모로 지정된 다음 스�


if not game:IsLoaded() then
game.Loaded:Wait()
end

또한 참조하십시오.


반환

클라이언트가 게임을 처음 로드했는지 여부.

코드 샘플

Custom Loading Screen

local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Create a basic loading screen
local screenGui = Instance.new("ScreenGui")
screenGui.IgnoreGuiInset = true
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundColor3 = Color3.fromRGB(0, 20, 40)
textLabel.Font = Enum.Font.GothamMedium
textLabel.TextColor3 = Color3.new(0.8, 0.8, 0.8)
textLabel.Text = "Loading"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Parent entire screen GUI to player GUI
screenGui.Parent = playerGui
-- Remove the default loading screen
ReplicatedFirst:RemoveDefaultLoadingScreen()
--wait(3) -- Optionally force screen to appear for a minimum number of seconds
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()

SetPlaceId

void
플러그인 보안

이 함수는 게임 인스턴스의 DataModel.PlaceIdplaceId로 설정합니다.

장소를 게시하지 않고 로컬 파일 DataModel.PlaceId 에서 액세스하려면 모두 DataModel.GameIdDataStoreService


local DataStoreService = game:GetService("DataStoreService")
-- PlaceId를 universeId로 설정하여 데이터 저장소 '데이터'에 액세스합니다.
game:SetPlaceId(placeId)
game:SetUniverseId(universeId)
local dataStore = DataStoreService:GetDataStore("Data")

매개 변수

placeId: number

Class.DataModel.PlaceId를 설정하는 ID.


반환

void

SetUniverseId

void
플러그인 보안

이 함수는 현재 게임 인스턴스의 DataModel.GameId를 universeId로 설정합니다. 이 기능은 Roblox에 게시되지 않은 로컬 .rbxl 파일을 테스트할 때 유용합니다.

게시되지 않은 플레이스DataStoreService에 액세스하려면 모두 DataModel:SetUniverseId()DataModel:SetPlaceId() 이 설정되어 있어야 합니다.

매개 변수

universeId: number

Class.DataModel.GameId를 설정하는 ID.


반환

void

이벤트

GraphicsQualityChangeRequest

사용자가 그래픽 품질을 높이거나 낮추려고 할 때 단축키를 사용하여 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화면을 덮던 화

이 이벤트는 다음과 같은 조건에 따라 발생합니다:

  • 사용자가 F10을 누르면 이 이벤트는 betterQuality 인수를 가진 true 인수의 아르гу먼트로 발생합니다.
  • 사용자가 ShiftF10을 누르면 이 이벤트는 betterQuality 인수의 0> force0>로 발생합니다.

이 이벤트는 현재 그래픽 품질 수준을 제공하거나 그래픽 품질에 대한 모든 업데이트를 커버하지 않습니다. 예를 들어, 코어 GUI 탈출 메뉴에 변경된 내용은 등록되지 않습니다.

다음 스니펫을 사용하여 Enum.SavedQualitySetting 에서 사용자의 UserGameSettings 를 검색할 수 있습니다.


UserSettings():GetService("UserGameSettings").SavedQualityLevel

사용자의 그래픽 설정이 자동으로 설정된 경우 Enum.SavedQualitySettingAutomatic 이 됩니다. 현재 개발자가 사용자의 컴퓨터의 현재 그래픽 품질 수준을 신뢰할 수 있는 방법은 없습니다.

매개 변수

betterQuality: bool

사용자가 그래픽 품질에 대해 증가 ( true ) 또는 감소 ( false )를 요청했는지 여부.


코드 샘플

Handling User Changes in Graphics Quality

game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("The user has requested an increase in graphics quality!")
else
print("The user has requested a decrease in graphics quality!")
end
end)

Loaded

이 이벤트는 게임이 처음으로 로드를 완료할 때 클라이언트에서 발생합니다.

로드된 이벤트는 게임에서 모든 초기 Instances 이 클라이언트에 복제되었을 때 발생합니다.

Class.ReplicatedFirst 에 부모로 지정되지 않은 경우 LocalScripts 는 이 이벤트 발생 전에 실행되지 않습니다. 다음 스냅 코드는 게임이 로드될 때까지 LocalScript 에서 실행됩니다.


if not game:IsLoaded() then
game.Loaded:Wait()
end

또한 참조하십시오.