一個 Player 對象是當前連接的客戶端。這些對象會在新玩家連接時添加到 Players 服務,然後在他們最終從伺服器切斷時移除。
Class.Instance.Name 屬性代表玩家的使用者名稱。當儲存有關玩家的信息時,您應該使用其 Player.UserId ,因為玩家可能會變更使用者名稱。
在 Players 服務中有多種類似的方法可以與玩家對象工作。使用這些方法的過程中,您可以使用它們的個別方法:
- 您可以使用 Players:GetPlayers() 來取得目前玩家的對象表;再次,使用此表而不是 Instance:GetChildren() 。
- 要偵測玩家對象的增加,建議使用 Players.PlayerAdded 事件 (而不是 Instance.ChildAdded 在 Class.Players 服務上)。
- 同樣地,您可以使用 Players.PlayerRemoving 來檢測玩家對象的移除,這會在 玩家 被移除之前發生 (而不是 Instance.ChildRemoved 在後方)。這是重要的,如果您正在儲存關於可能在移除後清理的玩家的資訊。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
-- Create a container for leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
-- Create one leaderstat value
local vScore = Instance.new("IntValue")
vScore.Name = "Score"
vScore.Value = 0
vScore.Parent = leaderstats
-- Add to player (displaying it)
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
概要
屬性
描述玩家的帳戶年齡。
確定玩家使用移動設備時是否會自動跳躍到障礙物上。
玩家的相機允許縮小放的最大距離。
玩家的相機允許放大放的最小距離。
將相攝影機的模式變更為第一人稱或第三人稱。
決定角色在玩家重生時是否載入外觀。如果為假,玩家將以預設外觀重生。
確定玩家的 character 的外觀對應的帳號的使用者ID。
設定攝影機和玩家之間的預設視角。
使用 Roblox 桌上版本時,決定玩家的攝影機動模式。
使用 Roblox 桌上版本時,決定玩家的角色移動模式。
決定玩家是否能夠切換滑鼠鎖定。
使用觸摸設裝置時,決定玩家的攝影機動模式。
使用觸摸設裝置時,決定玩家的角色移動模式。
玩家與玩家ID 的顯示名稱。
描述玩家追蹤到遊戲中的玩家的使用者ID。
是否暫停玩家端遊戲。
指示玩家是否擁有已驗證的徽章。
設置此玩家會看到其他人形標準��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
此屬性顯示本地玩家為 Roblox 帳號設定的地區 ID。
描述帳帳號的會員資格輸入。
設置這個玩家在其他人形名稱時所能看到的距離。如果設置為 0,名稱將隱藏。
確定玩家是否在特定團隊上。
設定零件以專注複製。
設定時,玩家將在指定的 SpawnLocation 重生。
確定玩家與哪個團隊是關聯的。
確定玩家與哪個團隊是關聯的。
一個獨特的整數,為所有用戶帳號分配。
方法
移除玩家角色的所有配件和其他外觀物件。
返回角色的頭部和指定的 Vector3 點之間的距離。如果玩家沒有角色,則返回 0。
返回包含說明如何 Player 加入體驗的典藏。
返回客戶端使用的滑鼠。
返回隔離網路延遲時間 (秒)。
返回玩家角色外觀是否載入的問題。
返回玩家是否使用具體、現實世界信號。
強制連接玩家從遊戲中,並提供訊息。
讓玩家的角色走在指定方向直到停止,或被玩家中斷(使用控制)。
設置玩家的帳號年齡。
設定玩家是否看到過濾的聊天,而不是正常的聊天。
返回一個在線好友的字典。
將玩家的排名在群組中以 0 和 255 之間的整數返回,其中 0 是非成員, 255 是群組的所有者。
返回玩家角色在群組中的角色,或 "訪客" 如果玩家不是群組的一員。
檢查玩家是否是Player.UserId 的用戶的朋友。
檢查玩家是否屬於指定的ID的群組的成員。
生成一個虛擬人偶,所以它裝備了通過 HumanoidDescription 通過的所有東西。
向伺服器發送請求,以將玩家指定位置。
活動
玩家的角色重生或重生時發射。
插入完整 Player.Character 外觀時發生。
正在發射玩家的角色,直到玩家的角色被移除。
發射時玩家使用 Roblox 提供的聊天欄發表聊天時。
此事件發生於遊戲引擎將 player 分類為閒置閒後約兩分鐘。時間是自從該點起算的剩餘秒數。
玩家的 TeleportState 變更時發射。
屬性
AccountAge
The AccountAge 是一個 Player 屬性,用於描述玩家的帳戶在何時在天數內註冊。它是使用 Player:SetAccountAge() 函數設定的,並且對於指令碼無法存取。
此屬性有助於條件性顯示新 Roblox 玩家內容,例如教學。
範例程式碼
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
AutoJumpEnabled
啟用自動跳轉設定將決定是否在使用移動設備的 Player.Character 跳過障礙時會自動跳轉。這可以使等級更加可瀏覽,而在移動設裝置上使用。
玩家加入遊戲時,StarterPlayer.AutoJumpEnabled 值將決定此屬性的初始狀態。然後,這個屬性將決定Humanoid.AutoJumpEnabled 屬性的Player.Character 在重生成時的自動跳躍行為。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Update button text
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Reflect the property in the player's character, if they have one
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Toggle auto-jump
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Update everything else
update()
end
button.Activated:Connect(onActivated)
update()
CameraMaxZoomDistance
CameraMaxZoomDistance Player 屬性設定攝影機可以從角色中的預設視角攝影機的最大距離。
即可說,它控制玩家的相機可以縮小的最大距離。
此屬性的預設值是 StarterPlayer.CameraMaxZoomDistance 。如果此值設為低於 Player.CameraMinZoomDistance 的值,它將會增加到 CameraMinZoomDistance。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMinZoomDistance
CameraMinZoonDistance Player 屬性設定相機可以從角色中的預設視角距離。
用其他話來說,它控制玩家的相機能夠放大的最小距離。
此屬性的預設值是 StarterPlayer.CameraMinZoomDistance 。如果此值設為超過 Player.CameraMaxZoomDistance 的值,它將被減少至 CameraMaxZoomDistance。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMode
CameraMode 屬性設定玩家的攝影模式,預設為第三人稱。
第三人稱
在預設的第三人稱模式(Enum.CameraMode.Classic)中,角色可以在相攝影機中查看。在此模式中,預設行為是:
- 玩家可以右鍵點擊並拖曳(滑鼠)、點擊並拖曳(移動)、使用副手柄(遊手把),或按下左鍵/右鍵來旋轉相機。
- 玩家移動他們的角色時,面向相應的移動方向。
- 玩家可以自由放大和縮小,即可在全尺寸放大到第一人稱。
第一人稱
在第一人稱模式 (Enum.CameraMode.LockFirstPerson) 中,玩家的攝影機會向前全部迫近。除非有可見的 GUI 現在 ( Class.GuiButton.Modal) 設置為 true ,否則移動滑鼠標、點擊移動或使用遊戲手柄上的副手柄棒擺動相
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMode = Enum.CameraMode.LockFirstPerson
CanLoadCharacterAppearance
CanLoadCharacterAppearance Player 屬性決定角色在玩家重生時是否載入外觀。此屬性的預設值是由 StarterPlayer.LoadPlayerAppearance 設置。
如果 true,角色會載入與玩家的 Player.CharacterAppearanceId 相對應的玩家外觀。
如果 是,玩家將會重新生成,沒有任何帽子、上衣、褲子等。
設置屬性後,角色重生後,它不會改變角色,您必須 call Player:LoadCharacter() 以載入新外觀。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CanLoadCharacterAppearance = false
Character
Class.Model 中的 Model 參考體,包括身體部位、Humanoid 和其他對象,用於模擬玩家在體驗中
初始此屬性是 nil ,它是設置玩家角色第一次生成時的值。使用 Player.CharacterAdded 事件來偵測玩家角色是否正確載入,並使用 Player.CharacterRemoving 事件來偵測角色即將消失。避免使用 1> Class
注意,LocalScripts 從 StarterGui 或 StarterPack 複製到玩家的 1>
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()end
CharacterAppearanceId
此屬性決定使用者的角色外觀對應玩家的 Player.Character 的使用者ID。 預設值為 Player.UserId ,其使用者ID是玩家在 Roblox 網站上創建的。
將此屬性變更為另一個帳號的使用者ID會導致玩家以該帳號的外觀(帽子、上衣、褲子等)重生。
遊戲也可以切換是否載入玩家的角色外觀是否在遊戲中載入,並且改變 StarterPlayer.LoadCharacterAppearance 屬性。
範例程式碼
local Players = game:GetService("Players")
local disguiseCommand = "/disguise "
local function onPlayerChatted(player, message)
if message:sub(1, disguiseCommand:len()):lower() == disguiseCommand:lower() then
local input = message:sub(disguiseCommand:len() + 1)
local id = tonumber(input)
if not id then -- Number failed to parse, maybe they typed a username instead
pcall(function() -- This call can fail sometimes!
id = Players:GetUserIdFromNameAsync(input) -- Fetch ID from name
end)
end
if id then
-- Set character appearance then respawn
player.CharacterAppearanceId = id
player:LoadCharacter()
else
-- We couldn't get an ID from their input
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
DevCameraOcclusionMode
定義了預設視頻指令處理器在相機和視頻主題之間的對象。由 StarterPlayer.DevCameraOcclusionMode 設置,無法對個人玩家進行變更。
預設值是 Zoom (0)。 請參閱 Enum.DevCameraOcclusionMode 以取得可用模式清單。
DevComputerCameraMode
DevComputerCameraMode 屬性決定玩家使用裝置時移動相機的方式。 請參閱 Enum.DevComputerCameraMovementMode 以取得每種相機控制模式的說明。此屬性無法使用 LocalScript (必須在伺服器上使用 Script)來設置。
此屬性的預設值是由 StarterPlayer.DevComputerCameraMovementMode 決定。
此屬性名稱中的「電腦」指向非- TouchEnabled 、非- GamepadEnabled 裝置。
設為 User Choice 時,玩家可以在 Roblox 遊戲設定中選擇任何控制模式 (除了 Scriptable 以外) 。一般來說,允許玩家選擇控制模式來最大限度地提高可用性。
您可以通過將此屬性設置為 Scriptable 來創建自訂控制程式。
此屬性對使用觸摸設裝置的玩家不影響。請參閱 Player.DevTouchCameraMode 代替。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Set the player's camera movement mode on computers to classic
player.DevComputerCameraMode = Enum.DevComputerCameraMovementMode.Classic
DevComputerMovementMode
DevComputerMovementMode 屬性決定玩家使用裝置上的滑鼠和鍵盤時移動角色的方式。 查看 Enum.DevComputerMovementMode 以獲得每個可用的移動控制模式的說明。 此屬性無法使用 LocalScript (它必須在服務器上使用 Script) 來設置。
此屬性的預設值是由 StarterPlayer.DevComputerMovementMode 決定。
此屬性名稱中的「電腦」指稱非- TouchEnabled 裝置。
設為 UserChoice 時,玩家可以在 Roblox 遊戲設定中選擇任何控制模式 (除了 Scriptable 以外) 來進行選擇。一般來說,建議您允許玩家選擇控制模式來最大限度地提高可用性。
您可以通過將此屬性設置為 Scriptable 來創建自訂控制程式。
此屬性對使用觸摸設裝置的玩家不影響。請參閱 Player.DevTouchMovementMode 代替。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player: Player)
-- Set the player's movement mode on desktop devices to click-to-move
-- Once set, the player can right click in the game world and the character will move there.
player.DevComputerMovementMode = Enum.DevComputerMovementMode.ClickToMove
end
Players.PlayerAdded:Connect(onPlayerAdded)
DevEnableMouseLock
此屬性決定玩家是否能夠按下 Mouse 鎖定按鈕以切換鎖定狀態。玩家可以在 Roblox 的遊戲設定中禁用鎖定按鈕。 預設情況下,此屬性設為 Class.StarterPlayer.EnableMouse
啟用滑鼠鎖定時,玩家的滑鼠會鎖定在屏幕中央。移動滑鼠會在玩家角色的 character 周圍繞鏡頭,並且角色會面向玩家角色的 camera 。它還會在玩家角色的角色上移動相機視圖。
注意,Shift-lock 相關 API 正在被棄用,因此建議使用 UserInputService.MouseBehavior 而不是鎖定鼠滑鼠。
範例程式碼
local Players = game:GetService("Players")
local function toggleMouseLock(player)
player.DevEnableMouseLock = not player.DevEnableMouseLock
if player.DevEnableMouseLock then
print("Mouse lock is available")
else
print("Mouse lock is not available")
end
end
local function onPlayerChatted(player, message, _recipient)
if message == "mouselock" then
toggleMouseLock(player)
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
DevTouchCameraMode
DevTouchCameraMode 屬性決定玩家使用 TouchEnabled 裝置時移動相機的方式。 請參閱 Enum.DevTouchCameraMovementMode 以獲得每個可用的攝影機控制模式的說明。此屬性無法使用 LocalScript
此屬性的預設值是由 StarterPlayer.DevTouchCameraMovementMode 決定。
設為 UserChoice 時,玩家可以在 Roblox 遊戲設定中選擇任何控制模式 (除了 Scriptable 以外) 來進行選擇。一般來說,建議您允許玩家選擇控制模式來最大限度地提高可用性。
您可以通過將此屬性設置為 Scriptable 來創建自訂控制程式。
此屬性對於不使用觸摸設裝置的玩家沒有影響。請參閱 Player.DevComputerCameraMovementMode 。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Set the player's camera movement mode on mobile devices to classic
player.DevTouchCameraMovementMode = Enum.DevTouchCameraMovementMode.Classic
DevTouchMovementMode
DevTouchMovementMode 屬性決定玩家使用 TouchEnabled 裝置時角色移動的方式。 參見 Enum.DevTouchMovementMode 以獲得每個移動控制模式的說明。 此屬性無法使用 LocalScript (必須在服務器上使用
此屬性的預設值是由 StarterPlayer.DevTouchMovementMode 決定。
設為 User Choice 時,玩家可以在 Roblox 遊戲設定中選擇任何控制模式 (除了 Scriptable 以外) 。一般來說,允許玩家選擇控制模式來最大限度地提高可用性。
您可以通過將此屬性設置為 Scriptable 來創建自訂控制程式。
此屬性對於不使用觸摸設裝置的玩家沒有影響。請參閱 Player.DevComputerMovementMode 。
範例程式碼
local Players = game:GetService("Players")
game.Players.PlayerAdded:Connect(function(player)
-- Set the player's movement mode on mobile devices to a dynamic thumbstick
player.DevTouchMovementMode = Enum.DevTouchMovementMode.DynamicThumbstick
end)
DisplayName
DisplayName 是一個 Player 屬物件,其中包含與 Player 對象關聯的用戶的顯示名稱。與用戶名不同,顯示名稱是一個玩家向其他玩家顯示的獨特名稱。如果 Roblox 用戶未選擇,則會閱讀與 1>Name1> �
注意:
- 顯示名稱不是獨一無二的,因此在單個實例中的兩名玩家可能擁有相同的名稱。如果您需要全球獨一無二的玩家標識,請使用 Player.UserId (靜態) 或 Player.Name (目前是玩家的當前用戶名) 。
- 顯示名稱可能會包含未解碼的字符串。請參閱 UTF-8 以取得更多關於使用包含未解碼字符串的字符串的方法。
FollowUserId
FollowUserId 是一個 Player.UserId 屬性,其中包含玩家跟隨到遊戲的用戶的 Class.Player.UserId。如果玩家沒有跟隨任何人到遊戲,此屬性將為 0。此屬性對於警告其他玩家已跟隨到遊戲的玩家很有用。
您可以使用此用戶ID和 Players:GetNameFromUserIdAsync() 函數來取得玩家的名稱。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local function onPlayerAdded(newPlayer)
if newPlayer.FollowUserId == player.UserId then
local hint = Instance.new("Hint")
hint.Parent = player:WaitForChild("PlayerGui")
hint.Text = "You were followed to this game by " .. newPlayer.Name .. "!"
task.delay(3, function()
if hint then
hint:Destroy()
end
end)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
GameplayPaused
GameplayPaused 屬性指示玩家是否在有 StreamingEnabled 啟用的地方在暫停狀態。它是在客戶端上設定,但複製到服務伺服器。要確定暫停狀態,您可以使用此屬性。
也看:
- Workspace.StreamingEnabled 控制內容傳輸是否啟用
- Workspace.StreamingIntegrityMode 和 Enum.StreamingIntegrityMode 以獲得更多關於遊戲暫停時的詳細資訊。
HealthDisplayDistance
Class.Player 屬性設定這個玩家在其他 Humanoid 健康條的視覺距離。如果設為 0,則會不顯示健康條。此屬性預設為 StarterPlayer.HealthDisplayDistance 。
如果顯示有人形的生命值狀態條,您可以使用 Humanoid.DisplayDistanceType 來設置顯示類型。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
LocaleId
Class.Player 屬性顯示本地玩家為 Roblox 帳號設定的語言區域 id。它包含兩個字母代碼 (例如 "en-us") 的語言區域。
這可以用來確定遊戲玩家基地的地理人口,並且也是會自動本地化的使用語言(請參閱 GuiBase2d.AutoLocalize)。這個屬性允許存取從伺服器來的玩家語言。
也 see LocalizationService.RobloxLocaleId , 用於本地化內容的本地語言ID。此值會與 Roblox 尚未內部支援本地玩家所設定的語言ID 不同。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
print(player.LocaleId)
MembershipType
此屬性只能從以下來確定會員資格:(它不能設為其他會員資格輸入)。它包含一個 Enum.MembershipType 枚帳帳號會員資格輸入的枚數。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.MembershipType == Enum.MembershipType.Premium then
-- Take some action specifically for Premium members
end
NameDisplayDistance
The NameDisplayDistance StarterPlayer 屬性設置此玩家在其他 Humanoid 名稱所見的距離。如果此屬性設置為 0,名稱將隱藏。此屬性為預設設置 StarterPlayer.NameDisplayDistance 。
如果顯示有人形的生命值狀態條,您可以使用 Humanoid.DisplayDistanceType 來設置顯示類型。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
Neutral
中立屬性決定玩家是否在特定團隊上。
- 當 true 時,玩家不在特定的團隊上。這也意味著 Player.Team 屬性將為空,而 Player.TeamColor 將為白色。
- 當 為 false 時,玩家位於特定的團隊。玩家的 Class.Player.Team 屬性將相應於玩家所在的 Class.Team,而 1> Class.Player.TeamColor1> 也是。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.Neutral then
print("Player is neutral!")
else
print("Player is not neutral!")
end
ReplicationFocus
ReplicationFocus Player 屬性設置零件圍著玩家重複。不同的 Roblox 系統(例如物理、流媒體等)通過網路傳輸通信(例如玩具、服務器、等)複製在不同的速率。
當此屬性為零時,它會恢復為預設行為,即將本地玩家的角色的 PrimaryPart 作為複製焦點。
此屬性只能在服務器上設置有 Script ,而不是 LocalScript 。 注意,此屬性不會變更或更新零件的網路擁有權。
範例程式碼
local Players = game:GetService("Players")
local PLAYER_NAME = "polarpanda16"
local player = Players:WaitForChild(PLAYER_NAME)
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "ReplicationFocusPart"
part.Anchored = true
player.ReplicationFocus = part
RespawnLocation
如果設定,玩家將在指定的 SpawnLocation 重生。此屬性只能通過 Lua 設置,並且必須包含有效的 SpawnLocation 參考。
- Class.Workspace 的後代
如果 RespawnLocation 未設定為有效的 SpawnLocation ,則預設重生程式將適用。有關更多資訊,請參閱 SpawnLocation 頁面。
RespawnLocation 的替代
- Class.Player 將從 SpawnLocations 中生成,屬於他們的團隊。在某些情況下可能會更簡單地更改玩家的 Player.Team 。
- 使用 PVInstance:PivotTo() 手動移動 Player.Character 。
範例程式碼
local Players = game:GetService("Players")
local function addSpawn(spawnLocation)
-- listen for the spawn being touched
spawnLocation.Touched:Connect(function(hit)
local character = hit:FindFirstAncestorOfClass("Model")
if character then
local player = Players:GetPlayerFromCharacter(character)
if player and player.RespawnLocation ~= spawnLocation then
local humanoid = character:FindFirstChildOfClass("Humanoid")
-- make sure the character isn't dead
if humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Dead then
print("spawn set")
player.RespawnLocation = spawnLocation
end
end
end
end)
end
local firstSpawn
-- look through the workspace for spawns
for _, descendant in pairs(workspace:GetDescendants()) do
if descendant:IsA("SpawnLocation") then
if descendant.Name == "FirstSpawn" then
firstSpawn = descendant
end
addSpawn(descendant)
end
end
local function playerAdded(player)
player.RespawnLocation = firstSpawn
end
-- listen for new players
Players.PlayerAdded:Connect(playerAdded)
-- go through existing players
for _, player in pairs(Players:GetPlayers()) do
playerAdded(player)
end
Team
團隊 屬性是一個參考 Team 對象內的
範例程式碼
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
-- Command to choose a team (note the trailing space)
local joinCommand = "/jointeam "
local function findTeamByName(name)
-- First, check for the exact name of a team
if Teams:FindFirstChild(name) then
return Teams[name]
end
-- Let's check for case-insensitive partial matches, like "red" for "Red Robins"
for _, team in pairs(Teams:GetChildren()) do
if team.Name:sub(1, name:len()):lower() == name:lower() then
return team
end
end
-- If we get to this point, no team matched the one we were looking for :(
end
local function onPlayerChatted(player, message, _recipient)
-- Note: string.sub(message, ...) is the same as message:sub(...)
if message:sub(1, joinCommand:len()):lower() == joinCommand:lower() then
-- Matched "/JOINTEAM xyz" to our join command prefix "/jointeam "
local teamName = message:sub(joinCommand:len() + 1) -- Cut out the "xyz" from "/jointeam xyz"
local team = findTeamByName(teamName)
if team then
-- Set the team!
player.Team = team
player.Neutral = false
else
-- Tell the player that team could not be found :(
player.Team = nil
player.Neutral = true
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
TeamColor
團隊顏色屬性決定了玩家與哪個團隊關聯,根據其團隊的 Team.TeamColor 。變更此屬性會改變 Player.Team 根據哪個團隊有相同的 BrickColor
通常來說,建議您使用此屬性來設定 Player.Team 到個別的 Team 而不是使用此屬性。設定此屬性通常會導致多個腳本中的同樣的磚塊顏色值;這是您想要避免在 "Don't Repeat Yourself" 原則上重複的內容。
範例程式碼
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
UserId
UserId 是 Roblox 上每個使用者帳號的 Class.Player 屬性,其包含一個只讀的整數,其 Instance.Name 地識別每個使用者帳號。與玩家的 1> Class.Instance.Name1> 不同,這個值不會改變在使用者的目前使用使用者名稱,這個值永遠不會改變。
當使用 GlobalDataStores 儲存/載入玩家資料時,這個屬性是必要的。使用玩家的UserId作為資料存取鑰匙,以便每個玩家都有獨特的鑰鍵。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.UserId)
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local player = Players:GetPlayerByUserId(1)
if player then
print("Player with userId 1 is in this server! Their name is: " .. player.Name)
else
print("Player with userId 1 is not in this server!")
end
local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")
local OWNER_ID = 212423 -- can use game.CreatorId for published places
local BADGE_ID = 1
local ownerInGame = false
local function playerAdded(newPlayer)
if newPlayer.UserId == OWNER_ID then
-- if new player is the owner, set ownerInGame to true and give everyone the badge
ownerInGame = true
for _, player in pairs(Players:GetPlayers()) do
-- don't award the owner
if player ~= newPlayer then
BadgeService:AwardBadge(player.UserId, BADGE_ID)
end
end
elseif ownerInGame then
-- if the owner is in the game, award the badge
BadgeService:AwardBadge(newPlayer.UserId, BADGE_ID)
end
end
local function playerRemoving(oldPlayer)
if oldPlayer.UserId == OWNER_ID then
ownerInGame = false
end
end
Players.PlayerAdded:Connect(playerAdded)
Players.PlayerRemoving:Connect(playerRemoving)
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local goldDataStore = DataStoreService:GetDataStore("Gold")
local STARTING_GOLD = 100
local function onPlayerAdded(player)
local playerKey = "Player_" .. player.UserId
local leaderstats = Instance.new("IntValue")
leaderstats.Name = "leaderstats"
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Parent = leaderstats
local success, result = pcall(function()
return goldDataStore:GetAsync(playerKey) or STARTING_GOLD
end)
if success then
gold.Value = result
else
-- Failed to retrieve data
warn(result)
end
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
方法
ClearCharacterAppearance
ClearCharacterAppearance 函數移除所有 Accessory , Shirt , Pants , 2>Class.CharacterMesh2> 和 <
它不會移除 t-shirts ,頭部網格或面部。
返回
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local function onChildRemoved(child)
print(child.ClassName, "removed from character")
end
character.ChildRemoved:Connect(onChildRemoved)
player:ClearCharacterAppearance()
--> BodyColors removed from character
--> ShirtGraphic removed from character
--> Shirt removed from character
--> Pants removed from character
--> CharacterMesh removed from character
--> Hat removed from character
--> Shirt removed from character
DistanceFromCharacter
Class.Player 函數返回角色頭和指定 Vector3 點之間的距離。如果玩家沒有 Player.Character ,則會返回 0。
這很有用,當決定遊戲家和其他物件或位置之間的距離。
如果您想要確定兩個非玩家實例或位置之間的距離,您可以使用以追蹤中方法:
local distance = (position1 - position2).magnitude
參數
玩家的距離將被測量的位置。
返回
玩家和位置之間的距離。
範例程式碼
local Players = game:GetService("Players")
for _, player in pairs(Players:GetPlayers()) do
print(player:DistanceFromCharacter(Vector3.new(0, 0, 0)))
end
GetJoinData
返回包含玩家加入體驗方式的資訊的字典。字典包含以下任何一個字段:
<tbody><tr><th>源遊戲ID</th><td>數字</td><td>體驗的 Class.DataModel.GameId 與玩家傳送的。 只有在玩家傳送到當前體驗時,並且服務器呼叫傳送功能時,才會顯示。</td></tr><tr><th>源地點Id</th><td>數字</td><td>Class.DataModel.PlaceId 的地方,從其 <code>Player</code> 傳送。只有在玩家傳送到當前位置,並且服務器呼叫傳送功能時,才會顯示。</td></tr><tr><th>玩家ID</th><td>數字</td><td>玩家邀請當前玩家參加體驗時的 <code>Class.Player.UserId</code>。使用此資料來識別參與者並觸發獎勵邏輯。</td></tr><tr><th>成員</th><td>陣列</td><td>一個包含 <code>Class.Player.UserId</code> 用戶傳送到 Player 旁邊的用戶數量的網絡列表。 只有在玩家傳送為一個群組的一部分時才會顯示。</td></tr><tr><th>傳輸資料</th><td>變體</td><td>反射原始傳輸中指定的 <code>teleportData</code>。 使用於玩家傳送到的服務器之間分享信息的用途。 只有在 <code>teleportData</code> 被指定並且服務器呼叫傳輸函數時才會顯示。</td></tr><tr><th>啟動資料</th><td>字串</td><td>一個單純或 JSON 編碼的字串,包含在 <a href="../../../production/promotion/deeplinking.md">深鏈接</a> URL 或 <code>Class.ExperienceInviteOptions.LaunchData</code> 中指定的發射資料。</td></tr></tbody>
鑰匙 | 價值類型 | 說明 |
---|
獲取資料和傳輸資料
如果伺服器啟動玩家的傳送,該方法所返回的典型資料包括玩家的傳送資料。 Class.Player:GetJoinData() 方法只能在伺服器上擷取傳送資料。要從客戶端擷取資料,請使用 Class.TeleportService:GetLocalPlayerTeleportData() 。
與 TeleportService:GetLocalPlayerTeleportData() 不同,Player:GetJoinData() 只提供符合以下安全要求的傳送資料:
- 它被保證已在過去 48 小時內發送。
- 它的確保已發送此 Player 。
- SourcePlaceId 和 SourceGameId 是保證它們是發送資料的地方和宇宙。這意味著您可以檢查傳送資料是否來自於指定的空間。
隨著這些資料由客戶端傳輸,它們仍然可能被惡意濫用者。 敏感的資料,例如玩家貨幣,應該通過安全的解決方案,例如 記憶體儲存 傳輸。
返回
包含 PlaceId 和 UserId 值的字典 (請參閱說明表)。
範例程式碼
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local analyticsStore = DataStoreService:GetDataStore("Analytics")
local ALLOWED_SOURCES = {
"twitter";
"youtube";
"discord";
}
local function onPlayerAdded(player)
local source = player:GetJoinData().LaunchData
-- check if the provided source is valid
if source and table.find(ALLOWED_SOURCES, source) then
-- update the data store to track the source popularity
local success, result = pcall(analyticsStore.IncrementAsync, analyticsStore, source)
if success then
print(player.Name, "joined from", source, "- total:", result)
else
warn("Failed to record join source: " .. result)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local DIRECT_JOIN_URL = "https://www.roblox.com/games/start?placeId=%d&launchData=%s"
local textBox = script.Parent
local function generateReferralURL(player)
return DIRECT_JOIN_URL:format(
game.PlaceId,
player.UserId
)
end
local function highlightAll()
if -- avoid recursive property updates
textBox:IsFocused()
and not (
textBox.SelectionStart == 1
and textBox.CursorPosition == #textBox.Text + 1
)
then
textBox.SelectionStart = 1
textBox.CursorPosition = #textBox.Text + 1
end
end
textBox.Focused:Connect(highlightAll)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(highlightAll)
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(highlightAll)
textBox.TextEditable = false
textBox.ClearTextOnFocus = false
textBox.Text = generateReferralURL(player)
local HttpService = game:GetService("HttpService")
local DATA_CHARACTER_LIMIT = 200
local function encodeTableAsLaunchData(data)
-- convert the table to a string
local jsonEncodedData = HttpService:JSONEncode(data)
if #jsonEncodedData <= DATA_CHARACTER_LIMIT then
-- escape potentially invalid characters, such as spaces
local urlEncodedData = HttpService:UrlEncode(jsonEncodedData)
return true, urlEncodedData
else
-- report character limit error
return false, ("Encoded table exceeds %d character limit"):format(DATA_CHARACTER_LIMIT)
end
end
local sampleData = {
joinMessage = "Hello!";
urlCreationDate = os.time();
magicNumbers = {
534;
1337;
746733573;
};
}
local success, encodedData = encodeTableAsLaunchData(sampleData)
if success then
print(encodedData)
else
warn("failed to encode launch data: " .. encodedData)
end
local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local launchData = player:GetJoinData().LaunchData
if launchData then
-- attempt to decode the data
local success, result = pcall(HttpService.JSONDecode, HttpService, launchData)
if success then
print(player.Name, "joined with data:", result)
else
-- this is probably due to the user messing with the URL
warn("Failed to parse launch data:" .. result)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local approvedPlaceIds = { 1 } -- insert approved PlaceIds here
local function isPlaceIdApproved(placeId)
for _, id in pairs(approvedPlaceIds) do
if id == placeId then
return true
end
end
return false
end
local function onPlayerAdded(player)
local joinData = player:GetJoinData()
-- verify this data was sent by an approved place
if isPlaceIdApproved(joinData.SourcePlaceId) then
local teleportData = joinData.TeleportData
if teleportData then
local currentLevel = teleportData.currentLevel
print(player.Name .. " is on level " .. currentLevel)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
GetMouse
GetMouse Player 函數返回客戶端使用的 Mouse 。玩家的鼠標實例可以用來跟蹤用戶鼠標輸入,包括左鍵和右鍵按鈕點擊和移動和位置。
Class.UserInputService 服務提供額外的功能和事件來跟蹤使用者輸入 - 特別是對於不使用滑鼠的設備。
注意:
- 此項目 必須 在 LocalScript 中使用,才能正常運行在線上 在線上。
- 2014 年 7 月的更新後,滑鼠的圖示現在可以使用此方法設定。
返回
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local mouse = player:GetMouse()
local function onButton1Down()
print("Button 1 is down")
end
mouse.Button1Down:Connect(onButton1Down)
GetNetworkPing
取得網路延遲測試數據來處理網路延遲問題。 Player 是測量資料從客戶端傳送到伺服器的延遲時間,然後再次傳送的時間。它不涉及資料解碼或處理。
對於客戶端 LocalScripts ,此功能只能在 Players.LocalPlayer 上呼叫。這個功能對於發生在高網路延遲場景中的問題進行診斷和調查非常有用。它還對隱藏延遲,例如調整投擲動畫的速度,有幫助。
返回
HasAppearanceLoaded
Class.Player 函數會返回玩家的 Player.Character 外觀是否載入。
玩家的外觀包括玩家的 Shirt 、 Pants 和 Accessories 。
這很有用,當確認遊戲家是否載入了外觀,這可以使用 Players.PlayerAdded 事件來跟蹤。
返回
一個Boolean指示是否載入玩家的角色外觀。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local loaded = player:HasAppearanceLoaded()
print(loaded)
while not loaded do
loaded = player:HasAppearanceLoaded()
print(loaded)
task.wait()
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
IsVerified
返回Boolean值,表示玩家的驗證狀態。當真偶時,玩家已驗證。驗證包括,但不限於,非VOIP電話號碼或政府ID驗證。
當實現 IsVerified,請務必慎重考慮,以確保實現不會不小心地阻止所有未驗證的用戶。
注意:此方法只能在後端服務伺服器上呼叫。將它從客戶端呼叫會導致錯誤。此外,此方法將在 Studio 中 sempre false 返回。
返回
指示玩家是否已驗證的Boolean。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player:IsVerified())
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Kick
Class.Player.Kick|Kick 方法可以讓體驗優雅地與客戶端分開,並可以選擇提供訊息給已分開的用戶。這對於檢查濫用者很有用。您應該只允許您信任的用戶啟動此方法對其他用戶。
不要在 Class.Player 上使用此方法,沒有任何參數會使用戶從服務器切斷,並提供預設通知訊息。在 Class.Player 上使用此方法並且以串作為第一個參數重置預設訊息,這會導致提供預設字串息的網站。
使用此方法從 LocalScript 時,只有本地使用者的客戶端可以被踢出。
參數
發送時發送訊息給用戶。
返回
Move
移動 Player 函數會使玩家的角色在指定方向走路直到停止,或被玩家中斷 (使用他們的控制)。
這很有用,當腦朵腦朵 Humanoids 移動在地圖上時,但不是由實際玩家的輸入控制。
注意,第二個參數表示是否要將提供的 Vector3 移動到世界坐標 ( 否 ) 或玩家的 Camera ( 2> 是2> ) 。
參數
返回
範例程式碼
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
-- Wait for the player's character and humanoid, which must exist before calling :Move()
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
character:WaitForChild("Humanoid")
-- The player will move until they are 50 studs away from the camera's position at the time of running
localPlayer:Move(Vector3.new(0, 0, -50), true)
SetAccountAge
SetAccountAge 函數設置玩家在天數內的 Player.AccountAge。
它是用來設定 Player 屬性,用於描述玩家帳戶在天數內註冊。
這不會設定玩家在帳號戶上的年齡,但是在帳戶自身相對於創建時的年齡。
參數
帳號的年齡。
返回
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetAccountAge(100)
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
SetSuperSafeChat
此方法設定玩家是否看到由 TextService:FilterStringAsync() 過濾的聊天,而不是正常聊天。
local Players = game:GetService("Players")local player = Players.LocalPlayerplayer:SetSuperSafeChat(true)
無論玩家是否啟用過濾聊天,所有聊天都應該在播放給其他玩家或在玩家自己的屏幕時過濾 TextService 。 TextService:FilterStringAsync() 返回一個 TextFilterResult 對象,可以根據訊息的目的地來過濾不同。
參數
指示玩家是否看到過濾的聊天。
返回
GetFriendsOnline
此功能返回一個在線好友的字典陣列,由 maxFriends 值限制。功能使用 30 秒的庇護。
在返回的陣列中,一些字段只對特定位置類型存在。例如,PlaceId 在位置類型為 0 時不會存在。
<tbody><tr><td><b>訪客ID</b></td><td>數字</td><td>Class.Player.UserId 的朋好友。</td></tr><tr><td><b>用戶名</b></td><td>字串</td><td>朋好友的使用者名稱。</td></tr><tr><td><b>顯示名稱</b></td><td>字串</td><td>Class.Player.DisplayName 的朋好友。</td></tr><tr><td><b>最後線上</b></td><td>字串</td><td>當朋友上次在線上 在線上。</td></tr><tr><td><b>在線上</b></td><td>boolean</td><td>如果朋友目前正在線上 在線上。</td></tr><tr><td><b>最後位置</b></td><td>字串</td><td>朋好友目前位置的名稱。</td></tr><tr><td><b>PlaceId 位置群組</b></td><td>數字</td><td>朋好友上次位置的地點ID。</td></tr><tr><td><b>遊戲ID</b></td><td>字串</td><td>朋好友上次位置的資料模型/工作 id。</td></tr><tr><td><b>地點類型</b></td><td>數字</td><td>朋好友上次位置的地點類型:<table>0 > 移動網站 > 1> 網頁游戲1> > 4> 在線時長4> ><tbody>7> 伺服器狀態</tbody>7> >9> 0> 發射</table></td></tr></tbody>
名稱 | 類型 | 說明 |
---|
參數
返傳回的最大在線好友數。
返回
一個在線好友的字典 (請參閱上方的表)。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local success, result = pcall(player.GetFriendsOnline, player, 10)
if success then
for _, friend in pairs(result) do
print(friend.UserName)
end
else
warn("Failed to get online players: " .. result)
end
GetRankInGroup
GetRankInGroup Player 函數將玩家的等級在群組中作為整數返回 0 與 255 之間,其中 0 是非成員, 255 是群組的所有者。
使用此在 Script ,而不是 LocalScript ,將不會獲得最新的資訊。如果玩家在遊戲中離開群組,GetRankInGroup 仍會認為他們在群組中直到他們離開。但與本地腳本程式不同,這不會在使用 LocalScript 時發生。
這是因為方法會儲存結果,因此在同一個玩家上呼叫 GetRankInGroup 的多個呼叫將會與方法首次呼叫時的結果相同。此方法的瀏發行為基於團體的:伺服器不會與客戶端分享相同的瀏發行。
參數
指定群組的 groupId。
返回
玩家在群組中的排名。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:GetRankInGroup(2) == 255 then
print("Player is the owner of the group, 'LOL'!")
else
print("Player is NOT the owner of the group, 'LOL'!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
GetRoleInGroup
GetRoleInGroup Player 函數將玩家的角色在群組中作為字串返回,或 Guest 如果玩家不是群組的一部分。
使用此在 Script ,而不是 LocalScript ,將不會獲得最新的資訊。如果玩家在遊戲中離開群組,GetRoleInGroup 仍會認為他們在群組中直到他們離開。但如果使用本地腳本,這不會發生在使用 LocalScript 的情況。
這是因為方法會儲存結果,因此在同一個玩家上呼叫多次 GetRoleInGroup 將會與方法第一次呼叫時的結果相同。此方法的監視行為是基於每個偶像的:伺服器不會與客戶端分享相同的監視資料。
參數
指定群組的 groupId。
返回
玩家在指定群組中的角色,或 訪客 如果玩家不是會成員 會員。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print("Player is ranked as '", player:GetRoleInGroup(2), "' in group, 'LOL'!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
IsFriendsWith
此功能向 Roblox 網站發送請求,以確認玩家是否是其他玩家的朋友,並且在該玩家的 Player.UserId 中提供 Player.UserId 。此功能會在使用 LocalScript 時儲存結果,以便多個使用該玩家的樣子 1>Class.Player.孝
參數
指定玩家的 Player.UserId。
返回
指定玩家是否為指定用戶的朋友。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:IsFriendsWith(146569) then
print(player.Name .. " is friends with gordonrox24!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
IsInGroup
IsInGroup Player 函數向 Roblox 網站發送請求,以確認玩家是否是群組的成員,並且提供該群組的 ID。
使用此在 Script ,而不是 LocalScript ,將不會獲得最新的資訊。如果玩家在遊戲中離開群組,IsInGroup 仍會認為他們在群組中直到他們離開。但此情況下使用本地腳本的話,會發生在使用 Class.Script 時發生的情形。
這是因為方法會儲存結果,因此在同一個玩家上使用 IsInGroup 的多次呼叫將會與方法首次使用時的結果相同。此方法的監視行為是基於每個偶像的:伺服器不會與客戶端分享相同的監視資料。
參數
指定群組的 groupId。
返回
指示玩家是否在指定的群組中。
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:IsInGroup(7) then
print("Player is in the Roblox Fan club!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
LoadCharacter
LoadCharacter Player 函數為玩家建立新角色,移除舊角色。它還清除玩家的 Backpack 和 PlayerGui。
這對於想要重新載入角色而不是擊殺玩家的情況,例如當你想載入新角色外觀後變更玩家的 Player.CharacterAppearance 。
注意:功能與 Player:LoadCharacterBlocking() 相似,但請求會在後台處理,而不是在同步。這意味著其他任務可以繼續載入角色,包括正在載入遊戲和任何其他任務。此外,此功能也可以在指令碼中使用,而 LoadCharacterBlocking 無法。
為個人玩家呼叫 LoadCharacter,不建議再次呼叫它,直到該玩家的 Player.CharacterAppearanceLoaded 事件發生後。
角色載入事件順序
使用 Player:LoadCharacter() 與 R15 虛擬人偶發生以下事件的順序 (注意:R6 的順序不同):
- Player.Character 設定
- Player.Character添加了火焰
- Player.Changed 會以「角色」值發射
- 角色外觀初始化
- Player.CharacterAppearanceLoaded 火焰
- Character.Parent 設為 DataModel
- 角色網格建造,並且角色會隨著尺寸變更
- 角色移動到產生位置
- LoadCharacter 返回
返回
範例程式碼
local Players = game:GetService("Players")
local RESPAWN_DELAY = 5
Players.CharacterAutoLoads = false
local function onPlayerAdded(player)
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local function onDied()
task.wait(RESPAWN_DELAY)
player:LoadCharacter()
end
humanoid.Died:Connect(onDied)
end
player.CharacterAdded:Connect(onCharacterAdded)
player:LoadCharacter()
end
Players.PlayerAdded:Connect(onPlayerAdded)
LoadCharacterWithHumanoidDescription
此功能會生成一個虛擬人偶,因此它有所裝備在 HumanoidDescription 中。
為個人玩家呼叫 LoadCharacterWithHumanoidDescription,不建議再次呼叫此玩家的 Player.CharacterAppearanceLoaded 事件發生後。
也看:
- 人形描述系統,一篇文章,說明人形描述系統的更多細節,並提供一些程式示例
參數
一個 HumanoidDescription 包含身體部位/顏色、身體縮放、配件、服裝和動畫,將裝備到載入的角色。
返回
範例程式碼
local Players = game:GetService("Players")
Players.CharacterAutoLoads = false
local function onPlayerAdded(player)
local humanoidDescription = Instance.new("HumanoidDescription")
humanoidDescription.HatAccessory = "2551510151,2535600138"
humanoidDescription.BodyTypeScale = 0.1
humanoidDescription.ClimbAnimation = 619521311
humanoidDescription.Face = 86487700
humanoidDescription.GraphicTShirt = 1711661
humanoidDescription.HeadColor = Color3.new(0, 1, 0)
player:LoadCharacterWithHumanoidDescription(humanoidDescription)
end
Players.PlayerAdded:Connect(onPlayerAdded)
活動
CharacterAdded
當玩家的角色重生時 (或重生時) 發生此事件。這個事件在設定 Class.Player.Character 為非 Player.Character 值或呼叫 nil 時發生。此事件在角色與 2>Class.Workspace2> 之前。
這可以與 Player.CharacterRemoving 事件一起使用,這會在玩家的角色即將被移除的時候發生,通常在死亡後。因此,這兩個事件可能會同時發生很多次,玩家在一個空間方重生。如果您想偵測玩家是否加入或離開遊戲
注意, Humanoid 和它的預設身體部位(頭、軀體和手臂)將在此事件發生時存在,但服裝項目,例如 Class.H
參數
這個角色的重生/重生。
範例程式碼
local Players = game:GetService("Players")
local function onCharacterAdded(character)
print(character.Name .. " has spawned")
end
local function onCharacterRemoving(character)
print(character.Name .. " is despawning")
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
-- This table maps "Player" objects to Vector3
local respawnLocations = {}
local function onCharacterAdded(character)
local player = Players:GetPlayerFromCharacter(character)
-- Check if we saved a respawn location for this player
if respawnLocations[player] then
-- Teleport the player there when their HumanoidRootPart is available
local hrp = character:WaitForChild("HumanoidRootPart")
-- Wait a brief moment before teleporting, as Roblox will teleport the
-- player to their designated SpawnLocation (which we will override)
RunService.Stepped:wait()
hrp.CFrame = CFrame.new(respawnLocations[player] + Vector3.new(0, 3.5, 0))
end
end
local function onCharacterRemoving(character)
-- Get the player and their HumanoidRootPart and save their death location
local player = Players:GetPlayerFromCharacter(character)
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
respawnLocations[player] = hrp.Position
end
end
local function onPlayerAdded(player)
-- Listen for spawns/despawns
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
local function onPlayerRemoved(player)
-- Forget the respawn location of any player who is leaving; this prevents
-- a memory leak if potentially many players visit
respawnLocations[player] = nil
end
-- Note that we're NOT using PlayerRemoving here, since CharacterRemoving fires
-- AFTER PlayerRemoving, we don't want to forget the respawn location then instantly
-- save another right after
Players.PlayerAdded:Connect(onPlayerAdded)
Players.ChildRemoved:Connect(onPlayerRemoved)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local function destroyAccessory(object)
if object:IsA("Hat") or object:IsA("Accessory") then
object:Destroy()
end
end
local function onCharacterAdded(character)
-- Wait a brief moment before removing accessories to avoid the
-- "Something unexpectedly set ___ parent to NULL" warning
RunService.Stepped:Wait()
-- Check for any existing accessories in the player's character
for _, child in pairs(character:GetChildren()) do
destroyAccessory(child)
end
-- Hats may be added to the character a moment after
-- CharacterAdded fires, so we listen for those using ChildAdded
character.ChildAdded:Connect(destroyAccessory)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
CharacterAppearanceLoaded
此事件發生當 Player.Character 的完整外觀已插入。
一般來說,Player.Character 有一個範圍包含其外觀修改的對象,包括Accoutrements、Shirts、2>Class.Pants2> 和 5>Class.CharacterMesh|
這個事件的使用之一是確保所有配件在載入後才會被摧毀。請參閱下方的範例來了解這個。
參數
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAddedAsync(player)
local connection = player.CharacterAppearanceLoaded:Connect(function(character)
-- All accessories have loaded at this point
local humanoid = character:FindFirstChildOfClass("Humanoid")
local numAccessories = #humanoid:GetAccessories()
print(("Destroying %d accessories for %s"):format(numAccessories, player.Name))
humanoid:RemoveAccessories()
end)
-- Make sure we disconnect our connection to the player after they leave
-- to allow the player to get garbage collected
player.AncestryChanged:Wait()
connection:Disconnect()
end
for _, player in Players:GetPlayers() do
task.spawn(onPlayerAddedAsync, player)
end
Players.PlayerAdded:Connect(onPlayerAddedAsync)
CharacterRemoving
CharacterRemoving 事件會在玩家的角色被移除之前發生,例如玩家重生時。
這個事件可以與 Player.CharacterAdded 事件,發生玩家角色重生或死亡時,一起使用。例個體、實例,如果您想每次玩家重生和死亡時打印一個訊息:
local Players = game:GetService("Players")
local function onCharacterSpawned(player)
print(player.Name .. " is spawning")
end
local function onCharacterDespawned(player)
print(player.Name .. " is despawning")
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function()
onCharacterSpawned(player)
end)
player.CharacterRemoving:Connect(function()
onCharacterDespawned(player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
這個事件只與 Character 的一 Player 有關。如果您需要追蹤玩家是否加入/離開遊戲,請使用 Players.PlayerAdded 和 1>Class.Players.PlayerRemoving1> 的事件。
參數
一個正在移除的角色的實例。
範例程式碼
game.Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(function(character)
print(character.Name .. " has died.")
end)
end)
Chatted
當 Player 輸入訊息時,發生聊天事件,並在 Roblox 的預設聊天欄中按 enter。這是使用預設聊天指指令碼的 Lua 綁定來防止玩家聊天的。你可以使用 StarterGui:SetCoreGuiEnabled() 來防止玩家聊天,並且停用 Enum.CoreGuiType 的 1>核心GUI1>
聊天指令
使用這個事件和一些字串操作函數,例如 string.sub() 和 string.lower(),就可以創建聊天指令,甚至是使用
過濾
發生此事件的訊息文字是 未過濾 。如果您正在顯示玩家輸入的聊天對話,顯示為其他玩家,它必須使用 Chat:FilterStringAsync() 來過濾。請記住此點,當創建自己的聊天系統時;如果您的遊戲過濾聊天,它可能會對它進行審核。
參數
範例程式碼
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local function onChatted(message)
-- do stuff with message and player
print(message)
end
player.Chatted:Connect(onChatted)
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
-- Command to choose a team (note the trailing space)
local joinCommand = "/jointeam "
local function findTeamByName(name)
-- First, check for the exact name of a team
if Teams:FindFirstChild(name) then
return Teams[name]
end
-- Let's check for case-insensitive partial matches, like "red" for "Red Robins"
for _, team in pairs(Teams:GetChildren()) do
if team.Name:sub(1, name:len()):lower() == name:lower() then
return team
end
end
-- If we get to this point, no team matched the one we were looking for :(
end
local function onPlayerChatted(player, message, _recipient)
-- Note: string.sub(message, ...) is the same as message:sub(...)
if message:sub(1, joinCommand:len()):lower() == joinCommand:lower() then
-- Matched "/JOINTEAM xyz" to our join command prefix "/jointeam "
local teamName = message:sub(joinCommand:len() + 1) -- Cut out the "xyz" from "/jointeam xyz"
local team = findTeamByName(teamName)
if team then
-- Set the team!
player.Team = team
player.Neutral = false
else
-- Tell the player that team could not be found :(
player.Team = nil
player.Neutral = true
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Idled
此事件發生於遊戲引擎將 player 分類為閒置後約 2 分鐘。時間是從該點開始到達該點的秒數。 事件會繼續發生每 30 秒,直到玩家停止閒置。
此事件只在客戶端指令碼中發生,不是服務器指令碼;使用 RemoteEvent 通知服務器的空閒玩家。
Roblox 會自動斷開玩家,至少 20 分鐘沒有活躍的玩家,這個事件很有用來警告玩家即將會被斷開,斷開玩家前的玩家,或其他離開鍵盤的功能。
要追蹤自動關閉發生的頻率,請與 Players.PlayerRemoving 的發生次數進行相關。
參數
玩家在秒鐘內的空閒置時間。
範例程式碼
local Players = game:GetService("Players")
local function onIdled(idleTime)
print(`Player has been idle for {idleTime} seconds`)
if idleTime > 900 then
-- warn player that they've been idle for 15 minutes
-- and will be disconnected in another 5
end
end
Players.LocalPlayer.Idled:Connect(onIdled)
OnTeleport
玩家的 TeleportState 變更時發生。這個事件很有用來偵測是否發生了傳送。
什麼是 TeleportState?
使用 TeleportService 傳送請求時,會先有一系列關卡在 Player 被傳送之前。當前關卡由 OnTeleport 提供的值表示,值為 Enum.TeleportState 。請參閱下方的實際範例。
參數
Class.Player 的新 Player。
Class.Player 正在傳送至的地方 ID。
將會傳送到的地點名稱,如果 TeleportService:TeleportToSpawnByName() 已被使用。
範例程式碼
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local playerOnTeleport = player
player.OnTeleport:Connect(function(teleportState, _placeId, _spawnName)
if teleportState == Enum.TeleportState.Started then
print("Teleport started (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.WaitingForServer then
print("Teleport waiting for server (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.InProgress then
print("Teleport in progress (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.Failed then
print("Teleport failed! (" .. playerOnTeleport.Name .. ")")
end
end)
end)