使用者和玩家

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

當使用者加入體驗時,Roblox 會將他們視為資料模型中的 玩家Player包含通過體驗廣泛的用戶信息,例如用使用者名稱、好好友名單、保存的虛擬人偶角色和 Roblox 會員輸入,以及影響用戶生命週期的屬性、方法和事件,例如加入體驗和離開體驗之間。

Players包含體驗中的所有Player。每個 Player 對象代表體驗中的使用者,並代理四個重要容器,您可以使用它們來自定義使用者的體驗:BackpackStarterGearPlayerGuiPlayerScripts

生命周期

客戶端和服務器側的腳本都可以連接到 Players.PlayerAddedPlayers.PlayerRemoved 事物件來執行對 Player 對象生命週期的回應的行動。它們也可以連接到 Player.CharacterAdded , Player.CharacterRemoving , 及 Humanoid.Died 事件來執行角色生成、解除生成及死亡時與遊戲相關的行動。

使用腳本存取伺服器相關服務,例如資料存儲來恢復和保存用戶加入或離開時的資料。如果客戶需要創建並移除與新用戶相關的遊戲實例,例如用於自訂排行榜的用戶統計資料的 GUI 顯示,請使用本地腳本。

使用者加入

當客戶端連接到體驗時,其相關的 Player 對象複製到 Players 服務。Players.PlayerAdded 代表用戶加入體驗。一些範例使用案包括載入使用者資料、配置團隊和變更使用者角色的服裝。Players.PlayerAdded 事件傳遞加入的用戶的 Player 對象,您可以在呼叫其他函數時使用,例如數據存儲和 RemoteEvent 對象。

在加入時載入使用者資料

若要載入使用者的資料當他們加入體驗時,請使用 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 對象。Players.PlayerRemoving代表用戶離開體驗。一些範例使用案包括儲存使用者資料、從得分板移除他們的統計資料,以及摧毀他們的模型,例如他們的房屋。Players.PlayerRemoving 事件傳送離開的用戶的 Player 對象,您可以在呼叫其他函數時使用,例如數據存儲和 RemoteEvent 對象。

注意事件被稱為 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 是否定,則您需要呼叫 Player:LoadCharacter() 手動生成角色。

當使用者的 Player.Character 重生時,腳本和本地腳本在 StarterCharacterScripts 複製到角色模型和 Player.CharacterAdded 事件發生。Player.CharacterAdded將新角色模型傳給任何事件聆聽者,您可以使用它來找到角色的Humanoid並修改其行為。例如,您可以使用 Humanoid:ApplyDescription() 來變更虛擬人偶的服裝,並使用 Humanoid.WalkSpeedHumanoid.JumpHeight 來修改虛擬人偶的運動。

角色解除生成

當玩家的 Humanoid 死亡時,其身體部位掉落到地面,並發生 Humanoid.Died 事件。伺服器會自動移除角色模型和內部的任何腳本,在 Players.Respawntime 屬性決定的時間後。您可以使用 Player.CharacterRemoving 事件來重置與角色相關的其他對象,例如車輛網絡所有權。

計數玩家死亡次數

您可以使用 Humanoid.Died 事件來處理擊殺的得分或創建自定义布偶模型。以下 Script 連接到 Player.CharacterAdded 來恢復每個用戶的角色模型,然後連接到角色的 Humanoid 對物件。當人形的 Humanoid.Died 事件發生時,腳本會增加使用者的人形死亡次數,並輸出那個數字。

服務器腳本服務中的腳本

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 可以在有理由相信創作者的體驗規則或執行規則違反 社群標準 的情況下,對體驗進行管理。

訊息指南

當使用者被禁止時,他們會收到一個錯誤模組顯示資訊,例如禁令長度和理由。在文字過濾的訊息中,您可以包含上訴或聯絡資訊等額外資訊,只要符合 Roblox 的 社群標準 即可。

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

  • 「前往我的群組/體驗頁面上的 Discord」
  • 「在 Twitter 或 X 上訊息我」

此訊息欄中不允許提及個人資訊或直接鏈接。這包括發布特定的使用者名稱或手把理方式,或提供直接鏈接到 Discord 伺服器或 X 帳帳號。

容器

Player 對象儲存了幾個重要容器:

背包

容器 Player.Backpack 儲存用戶的道具欄。使用者的 Tool 顯示物品在他們的 Backpack 畫面底部的庫存中。如果使用者從道具欄中選擇 Tool ,他們會裝備它,它將從 Player.Backpack 移動到 Player.Character

當使用者的 重生時,服務的內容和它們的 複製到他們的 .當角色死亡時,客戶會摧毀其 Backpack 並替換為新的一個。

Backpack 也儲存並執行 ScriptsLocalScripts 客戶端和伺服器都可以訪使用權 通行權 存取的內容。

Roblox 提供一個介面,讓玩家在畫面底部存取 Backpack 和庫存。若要停用預設 Roblox 背包介面並替換為自擁有的介面,請在本地腳本中呼叫 StarterGui:SetCoreGuiEnabled() 。欲知更多資訊,請參閱 StarterGui

新手裝備

容器 StarterGear 會將其內容複製到使用者的 Player.Backpack 當其角色生成時。此外,如果你的地方允許裝備和使用者擁有裝備,他們在生成時,裝備的 Tool 對象會轉移到他們的 Player.StarterGear 當中。

StarterPack 不同,Player.StarterGear 不是服務,而是每個 Player 對物件的子,因此其內容是用戶特定的。每個使用者可以在 Tool 內有不同的對象 Player.StarterGear。若要使用 Player.StarterGear , 在 權限 下啟用體驗設定頁面中的裝備。在權限頁面上,您可以通過裝備的輸入啟用它。要停用裝備,請卸下其輸入。

總是在將裝備添加到遊戲後測試遊戲,以確認用戶不能在那裡輕易濫用它們。裝備包括 Script 個對象,並允許玩家執行你可能不會考慮的行動。例如,導航裝備可能允許玩家存取你不希望他們存取的地圖部分。武器允許裝備的玩家傷害其他玩家,可能沒有報應或報復。

玩家GUI

PlayerGui 容器儲存創建玩家 GUI 的對象。如果 ScreenGui 是 PlayerGui 的後裔,那麼 ScreenGui 內的任何 GuiObject 都會顯示在玩家的屏幕上。任何 LocalScript 在複製到 PlayerGui 時執行。當玩家的 Player.Character 首次生成時,所有StarterGui的內容自動複製到玩家的PlayerGui

如果 Players.CharacterAutoLoads 設為 false,角色不會生成,直到 被呼叫為止。如果 StarterGui.ResetPlayerGuiOnSpawn 設為真值,每次玩家的角色重生,所有該玩家的PlayerGui內容都會清除並替換為StarterGui的內容。

玩家腳本

當使用者加入體驗時,StarterPlayer.StarterPlayerScripts容器中的內容複製到PlayerScripts。當複製時,所有本地腳本和模組腳本都會運行。

BackpackPlayerGui 容器不同,PlayerScripts 容器無法訪問服務伺服器,用戶的 PlayerScripts 容器在角色死亡和重生時不會重置。服務器側的 Script 對象也不會在被父輩到 PlayerScripts 時運行。PlayerScripts對於不與使用者角色生命週期有關的腳本,例如一般聊天系統或玩家輸入控制,有用。