用戶與玩家

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

當 Roblox 用戶加入遊戲時,他們會在 DataModel 中以 Player 的形象呈現。這個 Player 對象包含有關用戶的訊息,這些訊息在不同遊戲之間是通用的,例如他們的用戶名、好友列表和保存的 頭像角色,以及影響用戶在進入和離開遊戲之間的 生命周期 的屬性、方法和事件。每個 Player 對象還會有四個重要的 容器 作為父級,您可以用來自定義用戶的體驗:BackpackStarterGearPlayerGuiPlayerScripts

每個 Player 也會暴露一個 Player.User 屬性,這是一個 User 值,代表玩家在當前遊戲中的域範圍內身份。 有關用戶身份識別如何工作的信息,包括域範圍內用戶 ID 和 User 類型,請參見 用戶和域範圍內用戶 ID

生命周期

Players 服務包含遊戲中所有的 Player 實例。客戶端和服務器端的腳本都可以連接到 Players.PlayerAddedPlayers.PlayerRemoved 事件,以對 Player 對象的生命周期做出反應。腳本還可以連接到 Player.CharacterAddedPlayer.CharacterRemoving 事件,以執行與遊戲相關的操作,當角色生成或消失時。

用戶加入

當用戶客戶端連接到遊戲時,Players.PlayerAdded 事件被觸發,並傳遞該用戶的 Player 對象;您可以使用此對象進行許多操作,例如從數據存儲中加載 用戶數據 或將玩家分配到一個 團隊

例如,要在用戶加入遊戲時加載用戶的數據,可以在 Script 中使用 PlayerAdded 事件來檢索數據存儲中存儲的用戶數據,根據他們的用戶 ID:

Script in ServerScriptService

local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
Players.PlayerAdded:Connect(function(player)
local userId = player.UserId
-- 讀取數據存儲鍵
local getSuccess, currentData = pcall(function()
return playerDataStore:GetAsync(userId)
end)
if getSuccess then
print(currentData)
end
-- 使用 currentData 執行進一步操作
end)

角色生成

默認情況下,用戶的 Player.Character 模型表示他們的平台頭像,且 Players.CharacterAutoLoadstrue,這意味著角色模型在用戶加入遊戲時會自動生成。

當用戶的 Player.Character 生成時,ScriptsLocalScriptsStarterCharacterScripts 中會克隆到角色模型中,並觸發 Player.CharacterAdded 事件。 此事件將新的角色模型傳遞給其監聽器,您可以利用這些監聽器找到角色的 Humanoid 對象並修改其行為。例如,您可以使用 Humanoid:ApplyDescription() 更改頭像的服裝。

角色消失

當玩家的 Humanoid 死亡時,服務器會在 Players.RespawnTime 參數指定的時間後自動刪除角色模型。您可以然後使用 Player.CharacterRemoving 事件來重置其他對象或更新與該角色關聯的數據。

用戶離開

當用戶客戶端從遊戲中斷開連接時,服務器會銷毀其在 Players 服務中的關聯 Player 對象。此時,Players.PlayerRemoving 事件被觸發,並傳遞斷開連接的用戶的 Player 對象。您可以使用此事件進行許多操作,例如保存用戶數據、從計分板中刪除玩家統計,或刪除遊戲中玩家創建的模型。

以下示例 Script 監聽 PlayerRemoving 事件,並嘗試在其用戶 ID 下將用戶的數據保存到數據存儲中:

Script in ServerScriptService

local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
Players.PlayerRemoving:Connect(function(player)
local userId = player.UserId
-- 獲取玩家在遊戲中的數據狀態
local currentData = getCurrentData(player)
-- 保存到數據存儲
local setSuccess, errorMessage = pcall(function()
playerDataStore:SetAsync(userId, currentData)
end)
if not setSuccess then
warn(errorMessage)
end
end)

容器

每個表示用戶客戶端的 Player 對象存儲幾個重要的容器:BackpackStarterGearPlayerGuiPlayerScripts。在遊戲運行時,"編輯" 數據模型中的幾個容器會將其內容複製到這些 Player 容器中,包括 StarterGuiPlayerGuiStarterPackBackpack,以及 StarterPlayerScriptsPlayerScripts

一個圖示,映射了 '編輯' 和 '運行時' 數據模型之間的對象。

Tool 對象在 Backpack 中構成玩家的庫存,並在屏幕底部顯示為圖標按鈕。請參見 遊戲內工具 以獲取更多信息。

如上所示,StarterPack 的內容和玩家的 StarterGear 在玩家的 Character 生成時會複製到 Backpack 中。當角色死亡時,客戶端會銷毀 Backpack,並用一個新容器替換它。

要禁用默認的 Roblox 庫存 GUI 並用您自己的 GUI 替換它,請在 LocalScript 中調用 StarterGui:SetCoreGuiEnabled(),詳見 禁用默認 UI

禁止用戶

為了確保您的遊戲文明和公平競技,您可以禁止那些違反規則或社區准則的用戶。您可以修改禁止的持續時間、禁止消息,甚至將禁止擴展到潛在的替代帳戶。在使用此功能時,您必須遵循禁止的 準則消息

您有幾種選項來處理禁止:

設備阻擋

除了禁止帳戶外,Players:BanAsync() 還支持通過其配置表中的 ApplyDeviceBlock 字段實現 設備阻擋。當您禁止一個當前連接到您的遊戲的用戶,並將 ApplyDeviceBlock 設置為 true 時,該用戶相關的設備也會被阻止在 24 小時內重新加入。這個選項增加了對於禁止逃避的摩擦;被禁止的玩家不能立即從同一設備上的新帳戶重新加入遊戲。

  • 設備阻擋目前僅適用於桌面玩家(Windows 和 macOS)。它不適用於移動設備或遊戲主機。
  • 設備阻擋不會作為禁止傳播到任何使用該設備的其他帳戶。
  • 對受影響用戶調用解禁 API 會立即移除與該用戶設備相關的任何活動設備阻擋,允許他們重新加入遊戲。

禁止準則

在您的遊戲中實施禁止時,請遵循以下準則:

  • 遊戲規則不得與 Roblox 的 社區標準使用條款 相矛盾。例如,您不能創建排除某人的遊戲規則,因為這樣違反了 Roblox 的歧視、侮辱和仇恨言論政策
  • 創作者必須在所有用戶可訪問的地方明確說明其遊戲規則。
  • 創作者必須公平地應用其遊戲規則,而不是隨意針對某些用戶。
  • 用戶如果認為他們的禁令是錯誤的,可以直接向創作者申訴。Roblox 不會調解這些申訴,除非用戶認為創作者的遊戲規則或執行其規則的方式違反了 社區標準
  • 如果有理由相信創作者的遊戲規則或執行其規則的方式違反了 社區標準,Roblox 可以對遊戲進行監管。

消息準則

當用戶被禁止時,他們將收到一個錯誤模態,顯示禁止的持續時間和原因等信息。在經過文本過濾的消息中,您可以包括附加信息,例如上訴或聯繫信息,只要您符合 Roblox 的 社區標準

例如,在您的禁止訊息中,您可以引用品牌名稱和平台:

  • "訪問我的小組/遊戲頁面的 Discord"
  • "在 Twitter 或 X 上給我發消息"

在此消息字段中不允許提及個人信息或直接鏈接,包括發佈特定的用戶名或標誌,或提供直接鏈接到 Discord 伺服器或 X 帳戶。

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。