資料模型 (通常為 game 後的全球變量) 是 Roblox 的親子關係階層的根。其直接子兒是服務,例如 Class.Workspace 和 1> Class.Lighting 1>,這些都是 Roblox 遊戲的基本元素。
範例程式碼
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。
無法使用。 歷史上描述了 Enum.Genre 的位置,設為 Roblox 網站上設置。
跑行遊戲服務器的標識。
描述伺服器上執行的地方的 ID。
描述服務器所在位置的版本。
描述服務器的私人伺服器ID,如果服務器為私人伺服器或reserved server。
一個參考 Workspace 服務的引用。
方法
將一個函數綁定在伺服器關閉前要呼叫的。
返回包含任務調度器的基本信息的表。
返回與指定內容網址相關的 Instances 列表。
如果客戶端第一次載入遊戲完成,則返回 true。
將當前遊戲實例的 DataModel.PlaceId 設為 Class.DataModel.PlaceId 。
將當前遊戲實例的 DataModel.GameId 設為 宇宙ID 。
如果已經創建,則返回指定的服務;如果沒有指定的名稱,則返回錯誤。
如果不存在,則返回服務並且建立新的類別名稱。
屬性
CreatorId
這個屬性描述空間方的所有者的ID。如果DataModel.CreatorType屬性是User,則CreatorId會是空間空間的所有者的Player.UserId。如果2>Class.DataModel.CreatorType2>是5>Group
範例程式碼
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 的位空間,無論是否屬於用戶或群組。
如果 Class.DataModel.CreatorId 是 「DataModel.CreatorId」,那麼 1> Class.Player.UserId|userId」的屬性將會描述遊戲所擁有的帳戶的 4> Class.Player.UserId4>。 如果 7>CreatorType7> 是 0>「Enum.CreatorType
範例程式碼
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 將與使用樣板相對應。
也看:
- DataModel.PlaceId,這是描述伺服器上運行的地方的 ID
- DataModel.JobId,這是伺服器遊戲實例執行的獨一無二的識別器
- TeleportService ,這是一種可以用來在遊戲之間運輸 Players 的服務
Genre
此屬性已損壞,不應該使用。
這個屬性以前說明了 Enum.Genre 這個地方的 Roblox 網站 上設置。
此屬性,以及 DataModel.GearGenreSetting ,不再正確運行,因為 Roblox 網站上存在的音樂類別不再反映在 Enum.Genre 枚列表中。因結果,嘗試讀取此屬性可能會發生錯誤。
JobId
此屬性是執行遊戲服務器實個體、實例的獨一標識。它是一個全球獨一無二的標識(UUID),這意味著在過去或現在的任何兩個服務器上都不會有相同的ID。
Studio 中的空串。
也看看
- TeleportService:GetPlayerPlaceInstanceAsync() 可用來取回用戶當前伺服器的 DataModel.JobId。
- TeleportService:TeleportToPlaceInstance() 可以用來將 Player 傳送到特定服務伺服器。
- DataModel.PrivateServerId 描述遊戲服務器實例屬於的私人服務器的 ID。
- HttpService:GenerateGUID() , 可以用來生成您自己的 UUID。
PlaceId
此屬性描述伺服器上運行的地方的 ID。
如果該位置已發布到 Roblox,這個 ID 可以在 Studio 的 資產管理器 右鍵瀏覽到位置內的 地方 並選擇 複製到剪貼簿 。
如果該位置尚未發布到 Roblox,此 ID 將與使用的樣板相對應。
也看看
- DataModel.GameId , 説明當前位置所屬的體驗 ID
- DataModel.JobId,這是伺服器遊戲實例執行的獨一無二的識別器
- TeleportService ,這是一種可以用來將 Players 運輸到不同地點的服務
PlaceVersion
此屬性描述服務器正在執行的地點的版本。
此版本號與空間方設定的 版本歷史 區域中顯示的版本號相對應。 它不是 Roblox 客戶端的當前版本。 此屬性對於所有未發佈的體驗都為 0。
當服務器為某個空間方建立時,會使用該空間方目前的版本。如果此服務器正在執行時,該服務器將會保持在其目前的版本。
這個屬性可以用來顯示 ScreenGui ,顯示遊戲的當前版本給 Players 來協助進行調試。
範例程式碼
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,如果伺服器是私人伺服器。
如果服務器不是私人服務器,這個屬性將是空字串。
私人服務器
私人服務器會引用以追蹤中內容:
- 私人伺服器 玩家可以從遊戲頁面購買
- 保留服務器、私人服務器由開發者使用 TeleportService:ReserveServer()
私人伺服器 id 與 job id
服務器的私人伺服器ID與 DataModel.JobId 不同。 JobId 是當前伺服器實個體、實例的獨一標識。
私人服務器 (私人或保留服務器) 可以有多個服務器實例與它們連合時間。這是因為,雖然只有一個服務器實例可以同時執行在私人服務伺服器上,新的服務器實例可以開啟和關閉,當玩家加入並離開遊戲。 為了使私人服務器Id 一致在所有這些服務器實例上
也看:
- DataModel.PrivateServerOwnerId ,一個描述私人服務伺服器所有者的屬性
- TeleportService:ReserveServer() , 一個創建保留伺服器的函數
範例程式碼
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
此屬性描述 UserId 的 Player,如果服務器是私人,它的 私人服務器 將包含私人伺服器。
如果服務器是標準或保留服務器,此屬性將設置為 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
也看:
- DataModel.PrivateServerId , 一個描述私人ID的獨特ID的屬性,reserved 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 和永遠不會是 Class.Workspace 的零。
Class.Workspace 也可以使用全球變量 workspace 和 ServiceProvider:GetService() 函數來存取。例如:
workspace -- 一個全球變數game.Workspace -- DataModel (遊戲) 的屬性game:GetService("Workspace") -- workspace is a service
方法
BindToClose
將一個函數綁定在服務器關閉前呼叫。如果綁定的函數接受參數,它就會傳送 Enum.CloseReason 來指定服務器關閉的原因。
您可以通過呼叫 BindToClose() 來重複多個功能。境界功能是並行呼叫並且在同一時間執行。
體驗伺服器會在關閉前等待 30 秒,以確保所有綁定功能停止執行。在 30 秒後,伺服器會在功能仍在執行時關閉。
要確認目前的會話不是在 Roblox Studio 中,請使用 RunService:IsStudio()。這會防止在線測試會話完成後,因為沒有線路連接而完成。
當您使用 DataStoreService 時,您也應該使用 BindToClose 來將所有未儲存的資料綁定到 DataStores 。這樣可以防止資料損失,如果服務器因為未預期的關閉而關閉。
也看:
- Enum.CloseReason 因為服務器關閉的原因。
- PluginGui:BindToClose(),將一個函數綁定到 PluginGui 關閉按鈕。
參數
在體驗伺服器關閉前,會執行一個名為的函數。如果指定的參數接受,則會傳送 Enum.CloseReason 來指定伺服器關閉的原因。
返回
範例程式碼
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)
game:BindToClose(function(closeReason)
print(`Closing with reason {closeReason}`)
task.wait(3)
print("Done")
end)
GetJobsInfo
返回包含任務調度器的基本信息的表。
在計算中,任務程式表是負荷任務的執行系統,負荷任務會在指定間隔執行。
您也可以在 Roblox Studio 中的任務程序表窗口中查看 live task scheduler 統計資料。
檢查表中第一個返回的行是包含統計資料 (或標題) 的引用典。它是以下格式:
{["name"] = "name",["averageDutyCycle"] = "averageDutyCycle",["averageStepsPerSecond"] = "averageStepsPerSecond",["averageStepTime"] = "averageStepTime",["averageError"] = "averageError",["isRunning"] = "isRunning",}
表中的後續輸入包含上述統計資料對於任務工作排程器執行的工作。例如:
{["name"] = "Heartbeat",["averageDutyCycle"] = 0,["averageStepsPerSecond"] = 0,["averageStepTime"] = 0,["averageError"] = 0,["isRunning"] = false,}
也看:
返回
包含任務工作排程器的工作程序資訊的表,請參閱上方格式。
範例程式碼
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 與指定內容網頁連結的列表。它可以用於插入 Roblox 資料庫的內容。不能用此方法插入 Sounds ,因為它們沒有與它們連結的 Instance 。
與 InsertService:LoadAsset() 不同,DataModel:GetObjects() 不需要要求資產 "信任",這意味著資產不需要屬於登入用戶,或是由 Roblox 創建,才能插入。但如果資產未被登入用戶,它必須是自由可用的。
由於此功能的安全上下文,它只能由插件或命令欄使用。對於可以在 Scripts 和 LocalScripts 中使用的替代方案,請參閱 InsertService:LoadAsset() 。
參數
指定的內容網址。
返回
一個用於內容 URL 的 Instances 網格。
範例程式碼
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)
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
此功能返回 true 如果客戶端第一次載入遊戲完成。
當遊戲中的所有初始 Instances 完成複製到客戶端時,此功能將返回 true。
除非他們與 ReplicatedFirst 親級,否則在遊戲未載入時 LocalScripts 不會執行。以下代碼從 LocalScript 在 1>Class.ReplicatedFirst1> 中執行,直到遊戲載入為止:
if not game:IsLoaded() thengame.Loaded:Wait()end
也看:
- DataModel.Loaded ,一個事件,當遊戲載入時發生
- Instance:WaitForChild(),可以用來等待個別 Instance 複製,而不用等待整個遊戲複製
返回
客戶是否第一次載入遊戲。
範例程式碼
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
此功能將遊戲實例的 DataModel.PlaceId 設置為指定的 placeId。
要從 Studio 中存取 DataModel.PlaceId 時,必須設定 DataModel.GameId 和 DataStoreService,因為這兩者在未發��
local DataStoreService = game:GetService("DataStoreService")-- 通過將 PlaceId 設置為 placeId 和 GameId 設置為 universeId 來存取資料儲存 "Data"。game:SetPlaceId(placeId)game:SetUniverseId(universeId)local dataStore = DataStoreService:GetDataStore("Data")
參數
設定 DataModel.PlaceId 的 ID。
返回
SetUniverseId
此功能將當前遊戲實例的 DataModel.GameId 設置為 universeId 。這是測試本地 .rbxl 檔案,尚未發布到 Roblox 時的好處。
要在未發行的空間方存取 DataStoreService,必須先設定 DataModel:SetUniverseId() 和 DataModel:SetPlaceId()。
參數
設定 DataModel.GameId 的 ID。
返回
活動
GraphicsQualityChangeRequest
使用熱鍵提示使用者提升或減少圖形品質時會發生火焰。
此事件在下列條件下發生:
- 如果使用者按下 F10 ,此事件會發生,使用者將提供 betterQuality 參數的 true 。
- 如果使用者按下 ShiftF10 ,此事件會發生,使用者的參數 betterQuality 為 0> false0> 。
此事件並不提供目前的圖形品質等級或覆蓋所有對圖形品質的更新。例如,在核心 GUI 逃生選單中所作的變更並不會被記錄。
您可以使用 Enum.SavedQualitySetting 與以下代碼取回使用者的 UserGameSettings:
UserSettings():GetService("UserGameSettings").SavedQualityLevel
如果使用者的圖形設定設為自動,則 Enum.SavedQualitySetting 將會變成 Automatic 。目前沒有方法可以讓開發人員取得使用者的電腦的圖形品質水平。
參數
使用者是否提示了增加 ( 真 ) 或減少 ( 錯誤 ) 圖形品質。
範例程式碼
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 完成複製到客戶端。
除非他們與 ReplicatedFirst 親級,LocalScripts 將在此事件發生時不會執行。以下代碼從 LocalScript 在 1>Class.ReplicatedFirst1> 中執行,會在遊戲載入時輸出:
if not game:IsLoaded() thengame.Loaded:Wait()end
也看:
- DataModel:IsLoaded(),一個返回是否載入遊戲的方法
- Instance:WaitForChild() , 可以用來等待整個遊戲載入時,無需等待 Instance 重複。