當使用者加入體驗時,Roblox 會將他們視為資料模型中的 玩家 。Player包含通過體驗廣泛的用戶信息,例如用使用者名稱、好好友名單、保存的虛擬人偶角色和 Roblox 會員輸入,以及影響用戶生命週期的屬性、方法和事件,例如加入體驗和離開體驗之間。
Players包含體驗中的所有Player。每個 Player 對象代表體驗中的使用者,並代理四個重要容器,您可以使用它們來自定義使用者的體驗:Backpack、StarterGear、PlayerGui 和 PlayerScripts 。
生命周期
客戶端和服務器側的腳本都可以連接到 Players.PlayerAdded 和 Players.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.WalkSpeed 或 Humanoid.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 的 社群標準 即可。
例如,在你的禁止訊息中,你可以引用品牌名稱和平台:
- 「前往我的群組/體驗頁面上的 Discord」
- 「在 Twitter 或 X 上訊息我」
此訊息欄中不允許提及個人資訊或直接鏈接。這包括發布特定的使用者名稱或手把理方式,或提供直接鏈接到 Discord 伺服器或 X 帳帳號。
容器
Player 對象儲存了幾個重要容器:
背包
容器 Player.Backpack 儲存用戶的道具欄。使用者的 Tool 顯示物品在他們的 Backpack 畫面底部的庫存中。如果使用者從道具欄中選擇 Tool ,他們會裝備它,它將從 Player.Backpack 移動到 Player.Character 。
當使用者的 重生時,服務的內容和它們的 複製到他們的 .當角色死亡時,客戶會摧毀其 Backpack 並替換為新的一個。
Backpack 也儲存並執行 Scripts 和 LocalScripts 客戶端和伺服器都可以訪使用權 通行權 存取的內容。
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。當複製時,所有本地腳本和模組腳本都會運行。
與 Backpack 和 PlayerGui 容器不同,PlayerScripts 容器無法訪問服務伺服器,用戶的 PlayerScripts 容器在角色死亡和重生時不會重置。服務器側的 Script 對象也不會在被父輩到 PlayerScripts 時運行。PlayerScripts對於不與使用者角色生命週期有關的腳本,例如一般聊天系統或玩家輸入控制,有用。