当一个 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 所对应的用户数据:
存放在 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.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:
存放在 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 对象表示用户的客户端,存储一些重要的容器:Backpack、StarterGear、PlayerGui 和 PlayerScripts。在游戏运行时,"编辑" 数据模型中的几个容器会将其内容复制到这些 Player 容器中,包括 StarterGui 到 PlayerGui、StarterPack 到 Backpack 和 StarterPlayerScripts 到 PlayerScripts。

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