当 Roblox 用户加入游戏时,他们在 DataModel 中被表示为 Player。这个 Player 对象包含有关用户的信息,这些信息在游戏之间是通用的,例如他们的用户名、好友列表和保存的 头像角色,以及影响用户在游戏中加入和离开的 生命周期 的属性、方法和事件。每个 Player 对象还包含四个重要的 容器,您可以使用这些容器来定制用户的体验:Backpack、StarterGear、PlayerGui 和 PlayerScripts。
每个 Player 还公开一个 Player.User 属性,这是一个 User 值,表示玩家在当前游戏中的域范围身份。有关用户识别如何工作的更多信息,包括域范围用户 ID 和 User 类型,请参见 用户和域范围用户 ID。

生命周期
Players 服务包含游戏中的所有 Player 实例。客户端和服务器端脚本都可以连接到 Players.PlayerAdded 和 Players.PlayerRemoved 事件,以响应 Player 对象的生命周期执行操作。脚本还可以连接到 Player.CharacterAdded 和 Player.CharacterRemoving 事件,以在角色生成或消失时执行与游戏相关的操作。
用户加入
当用户客户端连接到游戏时,Players.PlayerAdded 事件触发,并传递加入的用户的 Player 对象;您可以使用此对象执行多种操作,例如从数据存储加载 用户数据 或将玩家分配到 团队。
例如,要在用户加入游戏时加载用户的数据,可以在 Script 中使用 PlayerAdded 事件来检索存储在数据存储中的用户 ID 下的用户数据:
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.CharacterAutoLoads 为 true,这意味着角色模型在用户加入游戏时会自动生成。
当用户的 Player.Character 生成时,Scripts 和 LocalScripts 在 StarterCharacterScripts 中克隆到角色模型中,并触发 Player.CharacterAdded 事件。 此事件将新的角色模型传递给其监听器,您可以使用它来查找角色的 Humanoid 对象并修改其行为。例如,您可以使用 Humanoid:ApplyDescription() 来更改头像的服装。
角色消失
当玩家的 Humanoid 死亡时,服务器会在 Players.RespawnTime 指定的时间后自动移除角色模型。然后,您可以使用 Player.CharacterRemoving 事件来重置其他对象或更新与角色相关的数据。
用户离开
当用户客户端从游戏中断开连接时,服务器会销毁其在 Players 服务中的关联 Player 对象。此时,Players.PlayerRemoving 事件触发,并传递断开连接的用户的 Player 对象。您可以使用此对象执行多种操作,例如保存用户数据、从记分板中移除玩家统计信息或销毁玩家在游戏中创建的模型。
以下示例 Script 监听 PlayerRemoving 事件,并尝试在数据存储中保存用户的用户 ID 下的数据:
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 对象存储几个重要的容器:Backpack、StarterGear、PlayerGui 和 PlayerScripts。在游戏运行时,"编辑" 数据模型中的几个容器将其内容复制到这些 Player 容器中,包括 StarterGui 到 PlayerGui、StarterPack 到 Backpack 和 StarterPlayerScripts 到 PlayerScripts。

Tool 对象在 Backpack 中构成玩家的库存,并在屏幕底部显示为图标按钮。有关更多信息,请参见 游戏内工具。
如上所示,StarterPack 的内容和玩家的 StarterGear 在玩家的 Character 生成时克隆到 Backpack 中。当角色死亡时,客户端会销毁 Backpack 并用一个新的替换它。
要禁用默认的 Roblox 库存 GUI 并用您自己的替换它,请在 LocalScript 中调用 StarterGui:SetCoreGuiEnabled(),如 禁用默认 UI 中所述。
禁止用户
为了确保游戏中的文明和公平竞争,您可以禁止违反规则或社区准则的用户。您可以修改禁止时长、禁止消息,甚至将禁止扩展到潜在的备用账户。在使用此功能时,您必须遵循禁止 准则 和 消息。
您有几种选项可以处理禁止:
- 有关引擎 API 的编程使用,请参见 Players:BanAsync()。
- 有关开放云,请参见 禁止和阻止。
设备阻止
除了禁止账户外,Players:BanAsync() 还通过其配置表中的 ApplyDeviceBlock 字段支持 设备阻止。当您禁止当前连接到您游戏的用户时,如果 ApplyDeviceBlock 设置为 true,与该用户关联的设备也会被阻止在 24 小时内重新加入。此选项增加了对禁止规避的阻力;被禁止的玩家无法立即从同一设备上的新账户重新加入游戏。
- 设备阻止目前仅适用于桌面(Windows 和 macOS)上的玩家。它不适用于移动设备或控制台。
- 设备阻止不会传播为对使用该设备的任何其他账户的禁止。
- 对受影响用户调用解除禁止 API 会立即移除与该用户设备相关的任何活动设备阻止,允许他们重新加入游戏。
禁止准则
在您的游戏中实施禁止时,请遵循以下准则:
- 创作者必须在所有用户可访问的地方清楚地说明他们的游戏规则。
- 创作者必须公平地应用他们的游戏规则,而不是任意针对某些用户。
- 用户可以直接向创作者提出上诉,如果他们认为自己的禁止是错误的。除非用户认为创作者的游戏规则或执行其规则的方式违反了 社区标准,否则 Roblox 不会调解这些上诉。
- 如果有理由相信创作者的游戏规则或执行其规则的方式违反了 社区标准,Roblox 可以对游戏进行审核。
消息准则
当用户被禁止时,他们会收到一个错误模态,显示禁止时长和原因等信息。在文本过滤的消息中,您可以包含额外的信息,例如上诉或联系信息,只要您符合 Roblox 的 社区标准。
例如,在您的禁止消息中,您可以提及品牌名称和平台:
- "访问我小组/游戏页面上的 Discord"
- "在 Twitter 或 X 上给我发消息"
在此消息字段中不允许提及个人信息或直接链接。这包括发布特定的用户名或处理,或提供直接链接到 Discord 服务器或 X 账户。