当用户加入体验时,Roblox 将他们在数据模型中表示为 玩家 。 Player 对象包含与用户在体验之间的通用信息,例如他们的用户名、好友列表、保存的 虚拟形象 和 Roblox 会员类输入,以及影响用户从体验到离开体验的整个生命周期
Class.Players 服务包含体验中的所有 Player 实例。每个 Player 对象在体验中代表一个用户,它的父级四个重要容器代表您可以使用用户体验进行自定义的
生命周期
客户端和服务器端脚本都可以连接到 Players.PlayerAdded 和 Players.PlayerRemoved 事件,以便在 Player 对象的生命周期进行
使用脚本访问相关于服务器的服务,例如数据存储以恢复并保存用户加入或离开时的数据。 如果客户端需要创建和移除游戏玩法实例,例如在自定义排行榜上显示用户统计数据,请使用本地脚本。
用户加入
当客户机连接到体验时,其关联的 Player 对象克隆到 Players 服务。 Class.Players.Player
加入时加载用户数据
要加载用户在体验加入时数据,请在 Players.PlayerAdded 中使用 Script 事件。 下面的示例 Script 列出了事件并尝试使用用户的用户ID作为数据存储钥键来恢复用户的数据。 成功恢复用户数据后,您可以使用它来加载用户的进度和统
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
game:GetService("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
-- 使用当前数据进行更多操作
end)
用户离开
当客户端从体验中断开时,服务器会从Player对象从Players服务中摧毁。
注意,该事件被称为 Player.PlayerRemoving,而不是 Player.PlayerRemoved,因为 “删除” 将暗示该 Player 对象已被移除,因此对脚本无法访问。
保存用户数据在离开
要保存用户在体验离开时保存的数据,请使用 Players.PlayerRemoving 事件在 Script 中。 以下示例 Script 列出事件并尝试使用用户ID保存用户的数据,作为数据存储钥键。
服务器脚本服务中的脚本
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
game:GetService("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.Character 模型代表他们的虚拟形象。默认情况下,Player.CharacterAutoLoads 是真的,用户的角色模型在体验加入时自动生成。如果 Player.CharacterAutoLoads 是错误,请调用 2>Class.Player.CharacterLoadCharacter()2> 手动生成角色
当用户的 Class
角色消失
当玩家的 Humanoid 死亡时,其身体部分会落到地上,并且 Humanoid.Died 事件会触发。 服务器会自动移除角色模型和任何脚本在其内部后,在 Class.Players.Respawntime
计数玩家死亡
您可以使用 Humanoid.Died 事件来处理得分为击杀或创建自定义 ragdoll 模型。下列 Script 连接到 Player.CharacterAdded
服务器脚本服务中的脚本
game:GetService("Players").PlayerAdded:Connect(function(player)
local deaths = 0
player.CharacterAdded:Connect(function(character)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
deaths += 1
print(player.Name .. " death count: " .. deaths)
end)
end)
end)
禁止用户
为了确保在您的体验中保持礼貌和公平游戏,您可以禁止违反您的体验规则和社区指南的用户。您可以修改禁令时间、禁令消息和 даже扩展禁令到潜在的替代帐户。当使用此精选时,您还必须遵守禁止和消息。
实现和使用说明,请参阅Players.BanAsync。
禁止准则
在实现禁令在您的体验时,请遵循以下指导方针:
- 创作者必须在所有用户都能访问的地方清晰地声明他们的经验规则。
- 创作者必须公平地应用他们的经验规则,不能随意目标特定用户。
- 用户可以直接向创作者提出上诉,如果他们认为自己的封禁是错误的。
- Roblox 不会调解这些投诉,除非用户相信创建创作者的体验规则或执行其规则违反 社区标准。
- Roblox 可以在有足够的理由时修改体验,例如确认创作者建者是否遵守 社区标准 或者确认违反了创建者的体验规则。
消息准则
当用户被禁止时,他们会收到一个错误模态显示信息,例如禁令长度和理由。 在文本过滤器中,您可以包含您满足 Roblox 社区标准的要求时,包括更多信息,例如请求或联系信息。
例如,在您的禁令消息中,您可以引用品牌名称和平台:
- “访问我的群组/体验页面的 Discord”
- “在 Twitter 上给我发送消息或 X”
不允许包含个人信息或直接链接的此消息字段。这包括发布特定用户名或处理器,或提供直接链接到 Discord 服务器或 X 帐户。
容器
Class.Player 对象存储多个重要容器:
背包
Class.Player.Backpack 容器存储用户的物品栏。Tool 对象在用户的 Backpack 显示在他们的屏幕底部。如果用户从道具栏中选择 1>Class.Tool1> ,它将装备
当用户的 Player.Character 生成时,服务中的 StarterPack 内容和其 Player.StarterGear 克隆到其 1> Class.Player.Backpack1> 。当角色死亡时,客户端摧毁其 4> Class.Backpack
Class.Backpack 还存储和运行 Scripts 和 LocalScripts,客户端和服务器都可以1) 使用权 2)通行证 3)访问权限。
Roblox 为玩家提供了一个界面,让他们可以在屏幕底部的 Class.Backpack 和物品栏上访问。要禁用默认 Roblox 背包 GUI 并将其替换为您自拥有的,请在 StarterGui:SetCoreGuiEnabled() 中调用 StarterGui。 For more 信息,请参阅 1> Class.StarterGui1>。
新手装备
Class.StarterGear 容器将其内容复制到用户的 Class.Player.Backpack 中,当其角色生成时。另外,如果您的位置允许装备和用户拥有装备,那么在其角色重生点时,Class.Tool 对其装备克隆对象的装备克隆到其1>Class.Player.StarterGear1> 。
与 StarterPack 不同, Player.StarterGear 不是服务,而是每个 Class.Player</
总是在将装备添加到游戏中后测试游戏,以确保玩家不会轻易在那里滥用它们。 装备包括 Script 对象,允许玩家执行您可能不会考虑的地图部分。 武器允许玩家使用装备,并可能无视惩罚或报复。
玩家界面
Class.PlayerGui 容器存储创建玩家 GUI 的对象。如果屏幕 GUI 是一个 PlayerGui 的子集,那么屏
如果 Players.CharacterAutoLoads 设置为 false,角色不会重生点,而 StarterGui 内容不会复制到直到 Player:LoadCharacter() 被调用。如果 Class.StarterGui.ResetPlayerGuiOn
玩家脚本
当用户加入体验时,StarterPlayer.StarterPlayerScripts 容器中的内容将复制到 PlayerScripts 容器。 任何本地脚本和模块脚本都会在它们复制时运行。
与 Backpack 和 PlayerGui 容器不同, PlayerScripts 容器不