Player
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Un oggetto Giocatore è un client che è attualmente connesso.Questi oggetti vengono aggiunti al servizio Players quando un nuovo giocatore si connette, poi rimossi quando alla fine si disconnettono dal server.
La proprietà Instance.Name riflette il nome utente del giocatore.Quando salvi informazioni su un giocatore, dovresti usare il loro Player.UserId poiché è possibile che un giocatore possa cambiare il suo nome utente.
Ci sono diversi metodi simili nel servizio Players per lavorare con gli oggetti Player. Usa questi rispetto ai loro rispettivi metodi Instance :
- Puoi ottenere una tabella di oggetti Player attuali utilizzando Players:GetPlayers() ; ancora una volta, usa questo invece di Instance:GetChildren() .
- Per rilevare l'aggiunta di oggetti Player, si consiglia di utilizzare l'evento (invece di > sul servizio ).
- Allo stesso modo, puoi rilevare la rimozione di oggetti Player utilizzando Players.PlayerRemoving , che si attiva solo prima che il Player venga rimosso (invece di Instance.ChildRemoved che si attiva dopo).Questo è importante se stai salvando informazioni sul giocatore che potrebbero essere rimosse o pulite dopo la rimozione.
Campioni di codice
Questo esempio di codice mostra la creazione di statistiche della classifica nella UI predefinita della lista dei giocatori di Roblox.Crea un leaderstat "Punteggio" che inizia a 0.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
-- Crea un container per leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
-- Crea un valore leaderstat
local vScore = Instance.new("IntValue")
vScore.Name = "Score"
vScore.Value = 0
vScore.Parent = leaderstats
-- Aggiungi al giocatore (visualizzandolo)
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
Sommario
Proprietà
Descrive l'età dell'account del giocatore in giorni.
Determina se il personaggio di un giocatore che utilizza un dispositivo mobile salterà automaticamente quando colpisce uno ostacolo.
La distanza massima a cui la fotocamera del giocatore è autorizzata a zoomare fuori.
La distanza minima in cui la fotocamera del giocatore è autorizzata a zoomare.
Cambia il modo della fotocamera in prima o terza persona.
Determina se l'aspetto del personaggio verrà caricato quando il giocatore si genera. Se falso, il giocatore si genererà con un aspetto predefinito.
Un Model controllato dal giocatore che contiene un Humanoid , parti del corpo, script e altri oggetti.
Determina l'ID utente dell'account il cui aspetto del personaggio viene utilizzato per un giocatore di character .
Imposta come la fotocamera predefinita gestisca gli oggetti tra la fotocamera e il giocatore.
Determina la modalità di movimento della fotocamera del giocatore quando si utilizza una versione desktop di Roblox.
Determina il modo di movimento del personaggio del giocatore quando si utilizza una versione desktop di Roblox.
Determina se il giocatore può attivare o disattivare il blocco del mouse.
Determina il modo di movimento della fotocamera del giocatore quando si utilizza un dispositivo touch.
Determina il modo di movimento del personaggio del giocatore quando si utilizza un dispositivo touch.
Il nome visualizzato dell'ID utente associato al giocatore.
Descrive l'ID utente del giocatore che è stato seguito in un gioco da un giocatore.
Se il gioco lato client del giocatore è attualmente in pausa.
Indica se un giocatore ha un badge verificato.
Imposta la distanza in cui questo giocatore vedrà le barre della salute di altri Umanoidi. Se impostata a 0, le barre della salute non verranno visualizzate.
Questa proprietà mostra l'ID locale che il giocatore locale ha impostato per il suo account Roblox.
Descrive il tipo di appartenenza all'account.
Imposta la distanza in cui questo giocatore vedrà i nomi di altri Umanoidi. Se impostato a 0, i nomi sono nascosti.
Determina se il giocatore è in una squadra specifica.
Un identificatore univoco del party a Player a cui appartiene.
Imposta la parte a concentrare la replicazione intorno.
Se impostato, il giocatore respawnerà al dato SpawnLocation.
Determina la squadra con cui un giocatore è associato.
Determina la squadra con cui un giocatore è associato.
Un identificatore univoco assegnato a tutti gli account utente.
Metodi
Rimuove tutti gli accessori e gli altri oggetti di apparenza del personaggio da un personaggio del giocatore.
Restituisce la distanza tra la testa del personaggio e il punto Vector3 dato. Restituisce 0 se il giocatore non ha un personaggio.
Restituisce un dizionario che contiene informazioni su come il Player si unisce all'esperienza.
Restituisce il mouse utilizzato dal client.
Restituisce il ritardo di rete isolato in secondi.
Restituisce se l'aspetto del personaggio del giocatore è stato caricato o meno.
Restituisce se il giocatore è verificato con segnali concreti e reali del mondo reale.
Disconnetti forzatamente un giocatore dal gioco, opzionalmente fornendo un messaggio.
Fa camminare il personaggio del giocatore nella direzione data fino a quando non viene fermato o interrotto dal giocatore (utilizzando i suoi controlli).
Imposta l'AccountAge del giocatore.
Imposta se il giocatore veda o meno chat filtrate, piuttosto che chat normali.
Restituisce un dizionario di amici online.
Restituisce il grado del giocatore nel gruppo come intero tra 0 e 255, dove 0 è un non membro e 255 è il proprietario del gruppo.
Restituisce il ruolo del giocatore nel gruppo come una stringa, o "Guest" se il giocatore non fa parte del gruppo.
Verifica se un giocatore è un amico dell'utente con il dato Player.UserId .
Verifica se un giocatore è un membro di un gruppo con l'ID specificato.
Crea un nuovo personaggio per il giocatore, rimuovendo quello vecchio. Pulisce anche Backpack e PlayerGui del giocatore.
Genera un avatar in modo che abbia tutto equipaggiato nel passato in HumanoidDescription .
Richieste che il server trasmetta al giocatore intorno alla posizione specificata.
Eventi
Sparato quando il personaggio di un giocatore si genera o si rigenera.
Si accende quando l'intero aspetto di un Player.Character è stato inserito.
Spedito proprio prima che il personaggio di un giocatore venga rimosso.
Si accende quando un giocatore chatta in gioco utilizzando la barra di chat fornita da Roblox.
Questo evento si attiva approssimativamente due minuti dopo che il motore di gioco classifica il player come inattivo.Il tempo è il numero di secondi trascorsi da quel punto.
Spedito quando lo stato di teletrasporto di un giocatore cambia.
Proprietà
AccountAge
L'AccountAge è una proprietà Player che descrive quanto tempo fa è stato registrato l'account di un giocatore in giorni.Viene impostato utilizzando la funzione Player:SetAccountAge(), che non può essere accessibile dagli script.
Questa proprietà è utile per mostrare condizionalmente il contenuto di nuovi giocatori Roblox come tutorial.
Campioni di codice
Questo esempio di codice aggiunge un segno ai giocatori che mostra quanto tempo è vecchio il loro account.Il segno utilizza l'età dell'account di un giocatore per determinare se sono un Nuovo Giocatore, Giocatore Veterano o Giocatore Regolare.
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- una settimana
local MIN_AGE_VETERAN = 365 -- uno anno
-- Questa funzione segna una parte con testo utilizzando un 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) -- Riempi genitore
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Aggiungi alla parte
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)
-- Ascolta questo giocatore che si sta generando
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
AutoJumpEnabled
La proprietà AutoJumpEnabled determina se il Player.Character di un Player utilizzando un dispositivo mobile salterà automaticamente quando colpisce un ostacolo.Questo può rendere i livelli più navigabili mentre si è su un dispositivo mobile.
Quando il giocatore si unisce al gioco, il valore StarterPlayer.AutoJumpEnabled determina lo stato iniziale di questa proprietà.Quindi, questa proprietà determina il valore della proprietà Humanoid.AutoJumpEnabled della Player.Character al momento della generazione.In altre parole, è possibile impostare il comportamento di auto-salto su una base per carattere, per giocatore e per gioco utilizzando queste tre proprietà.
Campioni di codice
Questo esempio di codice è destinato a un TextButton. Consente al giocatore di attivare il comportamento di auto-salto mentre è su un dispositivo mobile.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Aggiorna il testo del pulsante Aggiorna
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Rifletti la proprietà nel personaggio del giocatore, se ne ha uno
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Attiva/disattiva il salto automatico
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Aggiorna tutto il resto
update()
end
button.Activated:Connect(onActivated)
update()
CameraMaxZoomDistance
La proprietà CameraMaxZoomDistance Player imposta la distanza massima in studs dalla quale la fotocamera può essere dal personaggio con le fotocamere predefinite.
In altre parole, controlla la distanza massima a cui la fotocamera del giocatore è autorizzata a zoomare.
Il valore predefinito di questa proprietà è impostato da StarterPlayer.CameraMaxZoomDistance .Se questo valore è impostato su un valore più basso di Player.CameraMinZoomDistance , verrà aumentato a CameraMinZoomDistance.
Campioni di codice
The example demonstrates how to set a player's camera minimum and maximum zoom distance.
In this example, we set the Player.CameraMinZoomDistance and Player.CameraMaxZoomDistance to set the min and max distance in studs a player's camera can be from their character.
Note that since the example attempts to set the CameraMinZoomDistance to be greater than the CameraMaxZoomDistance, the CameraMinZoomDistance value will be decreased and set to the value of the max zoom distance.
To change the default min and max zoom distance values for a player when they first enter the game, you can change the StarterClass.Player.CameraMinZoomDistance and StarterClass.Player.CameraMaxZoomDistance properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMinZoomDistance
La proprietà CameraMinZoonDistance Player imposta la distanza minima in studs dalla quale la fotocamera può essere dal personaggio con le fotocamere predefinite.
In altre parole, controlla la distanza minima in cui la fotocamera del giocatore è autorizzata a zoomare.
Il valore predefinito di questa proprietà è impostato da StarterPlayer.CameraMinZoomDistance .Se questo valore è impostato su un valore superiore a Player.CameraMaxZoomDistance verrà ridotto a CameraMaxZoomDistance.
Campioni di codice
The example demonstrates how to set a player's camera minimum and maximum zoom distance.
In this example, we set the Player.CameraMinZoomDistance and Player.CameraMaxZoomDistance to set the min and max distance in studs a player's camera can be from their character.
Note that since the example attempts to set the CameraMinZoomDistance to be greater than the CameraMaxZoomDistance, the CameraMinZoomDistance value will be decreased and set to the value of the max zoom distance.
To change the default min and max zoom distance values for a player when they first enter the game, you can change the StarterClass.Player.CameraMinZoomDistance and StarterClass.Player.CameraMaxZoomDistance properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMode
La proprietà Modalità fotocamera imposta il modo della fotocamera del giocatore, predefinito in terza persona.
Terza persona
Nella modalità terza persona predefinita ( Enum.CameraMode.Classic ), il personaggio può essere visto nella fotocamera. Mentre in questa modalità, il comportamento predefinito è:
- I giocatori possono fare clic con il pulsante destro del mouse e trascinare (鼠), premere e trascinare (鼠), utilizzare il thumbstick secondario (gamepad) o premere le frecce sinistra/destra (tastiera) per ruotare la fotocamera attorno al loro personaggio.
- Quando un giocatore muove il suo personaggio, si trova nella direzione di movimento corrispondente.
- I giocatori possono zoomare e scorrere liberamente, anche alla prima persona in pieno zoom.
Prima persona
Nella modalità in prima persona ( Enum.CameraMode.LockFirstPerson ), la fotocamera del giocatore viene ingrandita fino in fondo.A meno che non ci sia una GUI visibile presente con la proprietà GuiButton.Modal impostata su true , muovendo il mouse, trascinando su mobile o usando il thumbstick secondario su un gamepad ruoterà la fotocamera attorno al personaggio.
Campioni di codice
This example demonstrates how to change the character's CameraMode to first person using the LockFirstPerson value of the Enum.CameraMode enum.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMode = Enum.CameraMode.LockFirstPerson
CanLoadCharacterAppearance
La proprietà CanLoadCharacterAppearance Player determina se l'aspetto del personaggio verrà caricato quando il giocatore si genera.Il valore predefinito di questa proprietà è impostato da StarterPlayer.LoadPlayerAppearance .
Se vero, il personaggio caricherà l'aspetto del giocatore corrispondente al giocatore Player.CharacterAppearanceId.
Se false, il giocatore si genererà con un aspetto predefinito - un modello di personaggio grigio senza cappelli, camicie, pantaloni, ecc.
L'attempto di impostazione della proprietà dopo che il personaggio è stato generato non cambierà il personaggio, devi chiamare Player:LoadCharacter() per caricare la nuova apparenza.
Campioni di codice
This example demonstrates how to disable loading a player's character appearance. Instead, the player loads as a grey model without any hats, shirts, pants, etc.
This is useful for games using custom clothing and accessories.
Note that if the character has already spawned, this change will not take affect until the player respawns or the Player:LoadCharacter() function is called.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CanLoadCharacterAppearance = false
Character
La proprietà Carattere contiene un riferimento a un Model contenente un Humanoid , parti del corpo, script e altri oggetti richiesti per simulare l'avatar del giocatore in-experience.Il modello è parented to the Workspace ma può essere spostato.Viene caricato automaticamente quando Players.CharacterAutoLoads è true e può essere caricato manualmente altrimenti usando Player:LoadCharacter() .
Inizialmente questa proprietà è nil e viene impostata quando il personaggio del giocatore viene generato per la prima volta.Usa l'evento Player.CharacterAdded per rilevare quando il personaggio di un giocatore si carica correttamente e l'evento Player.CharacterRemoving per rilevare quando il personaggio è about to despawn.Evita di utilizzare Object:GetPropertyChangedSignal() su questa proprietà.
Nota che LocalScripts che vengono clonati da StarterGui o StarterPack in un modello di giocatore di PlayerGui o Backpack rispettivamente sono spesso eseguiti prima che il vecchio modello di personaggio venga sostituito, quindi Player.Character può riferirsi al vecchio modello il cui Parent proprietà è nil .Pertanto, in un LocalScript sotto StarterGui o StarterPack , è consigliabile assicurarsi che il genitore di Personaggio non sia nil prima di utilizzarlo, ad esempio:
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()end
CharacterAppearanceId
Questa proprietà determina l'ID utente dell'account il cui aspetto del personaggio viene utilizzato per un giocatore di character .Per impostazione predefinita, questa proprietà è la Player.UserId, che utilizza l'avatar del giocatore come lo hanno creato sul sito Web di Roblox.
Cambiare questa proprietà all'ID utente di un altro account farà sì che il giocatore venga generato con l'aspetto di quell'account (tappi, camicia, pantaloni, ecc.).
I giochi possono anche attivare se o meno l'aspetto del personaggio di un giocatore sia caricato in gioco modificando la proprietà StarterPlayer.LoadCharacterAppearance.
Campioni di codice
Questo esempio di codice consente ai giocatori di chattare "/disguise xyz", dove xyz è un ID utente o un nome utente, e respawneranno apparendo come l'avatar di quel account.Prova a digitare "/disguise 261" o "/disguise Shedletsky"!
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 -- Impossibile analizzare il numero, forse hanno digitato un nome utente invece
pcall(function() -- Questa chiamata può fallire a volte!
id = Players:GetUserIdFromNameAsync(input) -- Recupera l'ID dal nome
end)
end
if id then
-- Imposta l'aspetto del personaggio quindi respawn
player.CharacterAppearanceId = id
player:LoadCharacter()
else
-- Non abbiamo potuto ottenere un ID dal loro input
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
DevCameraOcclusionMode
Definisce come i script della fotocamera predefinita gestiscono gli oggetti tra la fotocamera e il soggetto della fotocamera.Impostato da StarterPlayer.DevCameraOcclusionMode e non può essere cambiato per i singoli giocatori.
Il valore predefinito è Zoom (0). Vedi Enum.DevCameraOcclusionMode per un elenco dei modi disponibili.
DevComputerCameraMode
La proprietà DevComputerCameraMode determina il modo in cui un giocatore muove la sua fotocamera quando utilizza un dispositivo con mouse e tastiera.Vedi Enum.DevComputerCameraMovementMode per una descrizione di ogni modalità di controllo della fotocamera disponibile.Questa proprietà non può essere impostata utilizzando un LocalScript (deve essere impostata sul server utilizzando un Script ).
Il valore predefinito di questa proprietà è determinato da StarterPlayer.DevComputerCameraMovementMode .
La parola "Computer" in questo nome di proprietà si riferisce a dispositivi non-TouchEnabled , non-GamepadEnabled .
Quando è impostato su UserChoice , un giocatore può scegliere tra qualsiasi modalità di controllo (escluso Scriptabile ) nelle impostazioni dell'esperienza durante il gioco.In generale, è una buona idea consentire ai giocatori di scegliere il loro modo di controllo per massimizzare l'accessibilità.
È possibile creare un schema di controllo personalizzato impostando questa proprietà su Scriptabile .
Questa proprietà non influisce sui giocatori che utilizzano un dispositivo abilitato al tocco. Vedi Player.DevTouchCameraMode.
Campioni di codice
The example demonstrates how to set a player's camera movement mode for players on a computer.
In this example, we set the camera movement mode to Classic via the Enum.DevComputerCameraMovementMode enum. This means that the camera of players on touch enabled devices will track the player but will not automatically rotate if the player walks left or right.
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
La proprietà DevComputerMovementMode determina il modo in cui un giocatore muove il suo personaggio quando utilizza un dispositivo con mouse e tastiera.Vedi Enum.DevComputerMovementMode per una descrizione di ciascun modo di controllo del movimento disponibile.Questa proprietà non può essere impostata utilizzando un LocalScript (deve essere impostata sul server utilizzando un Script ).
Il valore predefinito di questa proprietà è determinato da StarterPlayer.DevComputerMovementMode .
La parola "Computer" in questo nome di proprietà si riferisce a dispositivi non TouchEnabled .
Quando è impostato su UserChoice , un giocatore può scegliere tra qualsiasi modalità di controllo (escluso Scriptabile ) nelle impostazioni dell'esperienza durante il gioco.In generale, è una buona idea consentire ai giocatori di scegliere il loro modo di controllo per massimizzare l'accessibilità.
È possibile creare un schema di controllo personalizzato impostando questa proprietà su Scriptabile .
Questa proprietà non influisce sui giocatori che utilizzano un dispositivo touch abilitato. Vedi Player.DevTouchMovementMode.
Campioni di codice
Demonstrates how to set the movement mode for players on computers using the Player.DevComputerMovementMode property.
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
Questa proprietà determina se un giocatore è in grado di attivare Mouse blocco premendo Shift .Un giocatore può disabilitare l'interruttore di blocco del mouse nelle impostazioni dell'esperienza durante il gioco.Per impostazione predefinita, questa proprietà è impostata sul valore di StarterPlayer.EnableMouseLockOption .Questo può essere impostato sul lato server durante l'esecuzione utilizzando un Script .Non può essere impostato sul lato client.
Quando il blocco del mouse è abilitato, il cursore del giocatore è bloccato al centro dello schermo.Spostare il mouse orbiterà la fotocamera intorno al giocatore di character , e il personaggio si volgerà nella stessa direzione del camera .Offsetta anche la vista della fotocamera appena sopra la spalla destra del personaggio del giocatore.
Si noti che le API correlate a shift-lock sono in fase di deprecazione, quindi si consiglia di utilizzare UserInputService.MouseBehavior invece per bloccare il mouse.
Campioni di codice
This code sample demonstrates how to toggle whether mouse lock is available to a player using a chat command. When a player types "mouselock", their ability to toggle mouse lock is toggled. Note that this does not toggle the actual state of mouse lock; rather, it changes whether a player is able to toggle it themselves.
This code can be run by pasting it into a Script within ServerScriptService.
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
La proprietà DevTouchCameraMode determina il modo in cui un giocatore muove la sua fotocamera quando utilizza un dispositivo TouchEnabled.Vedi Enum.DevTouchCameraMovementMode per una descrizione di ogni modalità di controllo della fotocamera disponibile.Questa proprietà non può essere impostata utilizzando un LocalScript (deve essere impostata sul server utilizzando un Script ).
Il valore predefinito di questa proprietà è determinato da StarterPlayer.DevTouchCameraMovementMode .
Quando è impostato su UserChoice , un giocatore può scegliere tra qualsiasi modalità di controllo (escluso Scriptabile ) nelle impostazioni dell'esperienza durante il gioco.In generale, è una buona idea consentire ai giocatori di scegliere il loro modo di controllo per massimizzare l'accessibilità.
È possibile creare un schema di controllo personalizzato impostando questa proprietà su Scriptabile .
Questa proprietà non influisce sui giocatori che non stanno utilizzando un dispositivo touch abilitato. Vedi Player.DevComputerCameraMovementMode invece.
Campioni di codice
The example demonstrates how to set a player's camera movement mode.
In this example, we set the camera movement mode to Classic via the Enum.DevTouchCameraMovementMode enum. This means that the camera of players on touch enabled devices will track the player but will not automatically rotate if the player walks left or right.
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
La proprietà DevTouchMovementMode determina il modo in cui un giocatore muove il suo personaggio quando utilizza un dispositivo TouchEnabled.Vedi Enum.DevTouchMovementMode per una descrizione di ciascun modo di controllo del movimento disponibile.Questa proprietà non può essere impostata utilizzando un LocalScript (deve essere impostata sul server utilizzando un Script ).
Il valore predefinito di questa proprietà è determinato da StarterPlayer.DevTouchMovementMode .
Quando è impostato su UserChoice , un giocatore può scegliere tra qualsiasi modalità di controllo (escluso Scriptabile ) nelle impostazioni dell'esperienza durante il gioco.In generale, è una buona idea consentire ai giocatori di scegliere il loro modo di controllo per massimizzare l'accessibilità.
È possibile creare un schema di controllo personalizzato impostando questa proprietà su Scriptabile .
Questa proprietà non influisce sui giocatori che non stanno utilizzando un dispositivo touch abilitato. Vedi Player.DevComputerMovementMode invece.
Campioni di codice
The example demonstrates how to set the movement mode for players on touch enabled devices.
In this example, we set the movement mode to Thumbstick via the Enum.DevTouchMovementMode enum. This means that players on touch enabled devices are able to move via a virtual thumbstick on their screen.
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
Il DisplayName è una proprietà Player che contiene il nome visualizzato dell'utente autenticato associato all'oggetto Player.A differenza dei nomi utente, i nomi da mostrare sono nomi non unici che un giocatore mostra agli altri.Se l'utente Roblox non ha scelto uno, la proprietà leggerà lo stesso della proprietà Name.
Nota:
- Poiché i nomi di visualizzazione non sono univoci, è possibile che due giocatori in una singola istanza abbiano nomi identici.Se hai bisogno di un identificatore globale univoco per un giocatore, usa Player.UserId (che è statico) o Player.Name (che è il nome utente attuale) invece.
- I personaggi generati con Player.LoadCharacter o dall'engine Roblox avranno la loro proprietà Humanoid.DisplayName assegnata alla proprietà Player.DisplayName.
- I nomi di visualizzazione possono avere caratteri Unicode nella stringa. Vedi UTF-8 per ulteriori informazioni su come lavorare con le stringhe con caratteri Unicode.
FollowUserId
Il FollowUserId è una proprietà Player che contiene il Player.UserId dell'utente che un giocatore ha seguito nel gioco.Se il giocatore non ha seguito nessuno nel gioco, questa proprietà sarà 0.Questa proprietà è utile per avvisare i giocatori che sono stati seguiti da un altro giocatore nel gioco.
Puoi ottenere il nome del giocatore seguito utilizzando questo ID utente e la funzione Players:GetNameFromUserIdAsync().
Campioni di codice
This code sample alerts players if a new player follows the local player into the game. Place this in a LocalScript in StarterPlayerScripts.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = player:WaitForChild("PlayerGui")
local function onPlayerAdded(newPlayer)
if newPlayer.FollowUserId == player.UserId then
local textLabel = Instance.new("TextLabel")
textLabel.Parent = screenGui
textLabel.Text = "You were followed to this game by " .. newPlayer.Name .. "!"
task.delay(3, function()
if textLabel then
textLabel:Destroy()
end
end)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
GameplayPaused
La proprietà GameplayPaused indica se il giocatore è attualmente in uno stato di pausa in un luogo con StreamingEnabled attivato.Viene impostato sul client ma replicato al server.Per determinare lo stato di pausa, puoi utilizzare questa proprietà.
Vedi anche:
- Workspace.StreamingEnabled che controlla se il streaming di contenuti è abilitato
- Workspace.StreamingIntegrityMode e Enum.StreamingIntegrityMode per maggiori dettagli su quando il gameplay viene interrotto.
HealthDisplayDistance
La proprietà HealthDisplayDistance Player imposta la distanza in studs in cui questo giocatore vedrà altre barre di salute Humanoid.Se impostato a 0, le barre della salute non verranno visualizzate.Questa proprietà è impostata su StarterPlayer.HealthDisplayDistance di default.
Se la barra della salute di un Umanoide è visibile, puoi impostare il tipo di visualizzazione utilizzando Humanoid.DisplayDistanceType .
Campioni di codice
This example demonstrates how to hide other Humanoid's (Player and NPC) health bars and names.
This is done by setting the player's Player.HealthDisplayDistance and Player.NameDisplayDistance properties to 0.
If you would like to display health bars and names, you set the properties to a value greater than 0. For instance, setting the properties to 100 means that the player will see other player's health and names up to 100 studs away.
To modify the default values for players, you can change the values of the StarterClass.Player.HealthDisplayDistance and StarterClass.Player.NameDisplayDistance properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
LocaleId
La proprietà LocaleId Player mostra l'ID locale che il giocatore locale ha impostato per il suo account Roblox.Contiene una stringa con il codice a due lettere (ad esempio, "en-us") per il locale.
Questo può essere utilizzato per determinare la demografia geografica della base di giocatori del tuo gioco e è anche il locale che verrà utilizzato per la localizzazione automatica del contenuto in-experience (vedi GuiBase2d.AutoLocalize ).Questa proprietà consente l'accesso al locale del giocatore dal server.
Vedi anche LocalizationService.RobloxLocaleId , l'ID locale utilizzato per la localizzazione del contenuto interno.Questo sarà un valore diverso quando Roblox non supporta ancora internamente il set locale del giocatore locale.
Campioni di codice
This example demonstrates how to check the locale of a local player using the Player.LocaleId property. It prints a string with the two letter locale code for the locale of the local player.
For instance, if the player's local is within the US, the locale will be:
en-us
local Players = game:GetService("Players")
local player = Players.LocalPlayer
print(player.LocaleId)
MembershipType
Questa proprietà può essere letta solo per determinare la membership (non può essere impostata su un altro tipo di membership).Contiene un Enum.MembershipType enum del tipo di appartenenza dell'account.
Campioni di codice
The following example checks whether a player has Premium membership.
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
La proprietà NameDisplayDistance StarterPlayer imposta la distanza in studs in cui questo giocatore vedrà altri nomi Humanoid.Se la proprietà è impostata a 0, i nomi sono nascosti.Questa proprietà è impostata su StarterPlayer.NameDisplayDistance di default.
Se la barra della salute di un Umanoide è visibile, puoi impostare il tipo di visualizzazione utilizzando Humanoid.DisplayDistanceType .
Campioni di codice
This example demonstrates how to hide other Humanoid's (Player and NPC) health bars and names.
This is done by setting the player's Player.HealthDisplayDistance and Player.NameDisplayDistance properties to 0.
If you would like to display health bars and names, you set the properties to a value greater than 0. For instance, setting the properties to 100 means that the player will see other player's health and names up to 100 studs away.
To modify the default values for players, you can change the values of the StarterClass.Player.HealthDisplayDistance and StarterClass.Player.NameDisplayDistance properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
Neutral
La proprietà Neutral determina se il giocatore è in una squadra specifica.
- Quando vero, il giocatore non è in una squadra specifica.Questo significa anche che la proprietà Player.Team sarà nil e la Player.TeamColor sarà bianca.
- Quando false, il giocatore è in una squadra specifica.La proprietà Player.Team corrisponderà alla Team in cui si trova il giocatore, così come lo farà la Player.TeamColor .
Campioni di codice
This example checks if a player is neutral. If the player is neutral, the game prints:
Player is neutral!
If the player is not neutral, the game prints:
Player is not neutral!
Note: Although this example prints the value of the local player's neutral property, you can change the example to get the value for any player.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.Neutral then
print("Player is neutral!")
else
print("Player is not neutral!")
end
PartyId
Una stringa read-only che identifica il party al quale il giocatore attualmente appartiene all'interno dell'esperienza.Se il giocatore non è in una parte, questo valore è una stringa vuota.
Questa proprietà è essenziale per l'integrazione con la funzione Roblox Party.Utilizzalo in combinazione con SocialService:GetPlayersByPartyId() e SocialService:GetPartyAsync() per accedere alle informazioni sulla festa di un giocatore e sui suoi membri.
Nota che questo servizio non funziona durante il playtest in Roblox Studio; per testare gli aspetti della tua esperienza utilizzandolo, devi pubblicare l'esperienza e giocarci nell'applicazione Roblox.
Campioni di codice
This example checks the Player.PartyId of a Player when they join the experience. If the player is in a party, it outputs the Player.PartyId; otherwise, it outputs that the player is not in a party.
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local partyId = player.PartyId
if partyId ~= "" then
print("Player is in a party with ID: " .. partyId)
else
warn("Player is not in a party")
end
end)
ReplicationFocus
La proprietà ReplicationFocus Player imposta la parte a concentrarsi sulla replicazione attorno a un Giocatore.Sistemi Roblox diversi che comunicano attraverso la rete (come fisica, streaming, ecc) si replicano a diversi tassi a seconda di quanto gli oggetti sono vicini al focus di replicazione.
Quando questa proprietà è , torna al suo comportamento predefinito che consiste nel trattare il personaggio del giocatore locale come focus di replicazione.
Questa proprietà dovrebbe essere impostata solo sul server con un Script , non un LocalScript .Si noti che questa proprietà non cambia o aggiorna la proprietà della rete delle parti.
Campioni di codice
Questo esempio crea un nuovo BasePart e imposta il Player di Player.ReplicationFocus di a quella parte.
Questo dimostra la funzionalità della proprietà ReplicationFocus.Puoi facilmente modificare la parte a cui è impostato il focus per cambiare il focus di replicazione.
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
Se impostato, il giocatore respawnerà al dato SpawnLocation.Questa proprietà può essere impostata solo attraverso Luau e deve contenere un riferimento a un valido SpawnLocation, che deve soddisfare i seguenti criteri:
- Discendente di Workspace
Se RespawnLocation non è impostato su un valido SpawnLocation allora la logica di spawn predefinita verrà applicata.Per maggiori informazioni su questo vedi la pagina per SpawnLocation .
Alternative a RespawnLocation
- Un Player apparirà da SpawnLocations appartenente al loro team. In alcuni casi potrebbe essere più semplice cambiare il Player.Team del giocatore invece.
- Implementa la tua logica di spawn personalizzata utilizzando PVInstance:PivotTo() per spostare manualmente il Player.Character .
Campioni di codice
This code sample will set the player to always respawn from the last SpawnLocation they touched. New players will respawn from the SpawnLocation named 'FirstSpawn' until they touch a different SpawnLocation.
This is an alternative to using the AllowTeamChangeOnTouch property to switch SpawnLocations and does not require Teams.
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
StepIdOffset
Team
La proprietà Team è un riferimento a un oggetto Team all'interno del servizio Teams.Determina la squadra in cui si trova il giocatore; se il Player non è in una squadra o ha un Player.TeamColor non valido, questa proprietà è nil .Quando questa proprietà è impostata, il giocatore si è unito al Team e all'evento Team.PlayerAdded dell'équipe associata.Allo stesso modo, Team.PlayerRemoved brucia quando la proprietà non è disattivata da un certo Team.
Campioni di codice
This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" 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)
This code sample allows any player to chat "/jointeam " where is the name of a team. It uses string manipulation using string.sub and string.lower to make the command case-insensitive and allow for partial matches. For example, "/jointeam red" will match the team "Red Robins".
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
La proprietà TeamColor determina a quale squadra è associato un giocatore in base alla Team.TeamColor di quella squadra.Cambiare questa proprietà cambierà Player.Team in base a quale squadra abbia la stessa BrickColor per il loro Team.TeamColor .Se nessun oggetto Team ha il TeamColor associato, il giocatore non verrà associato a una squadra.
Spesso è una buona idea impostare Player.Team al rispettivo Team invece di utilizzare questa proprietà.Impostare questa proprietà spesso porta alla ripetizione dello stesso valore BrickColor per un determinato team attraverso molti script; questo è qualcosa che vuoi evitare quando aderisci al principio "Non ripeterti" (DRY).
Campioni di codice
This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" 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)
ThirdPartyTextChatRestrictionStatus
UserId
L'UserId è una proprietà che contiene un intero leggibile che identifica in modo univoco e coerente ogni account utente su Roblox>.A differenza del Instance.Name di un Giocatore, che può cambiare a seconda del nome utente attuale dell'utente, questo valore non cambierà mai per lo stesso account.
Questa proprietà è essenziale quando si salva/carica i dati del giocatore utilizzando GlobalDataStores .Usa l'ID utente di un giocatore come chiave del deposito dati in modo che ogni giocatore abbia una chiave unica.
Campioni di codice
The below example would print the UserId of every user who entered a game.
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
The following code sample gives an example of a 'met the creator' badge system. This script will award a specified badge (BADGE_ID) to anyone who is in a server at the same time as the user associated with OWNER_ID.
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)
This code sample retrieves a player's saved gold from a data store and puts the returned value onto the leaderboard. Note that this sample does not save players' gold — it only loads it.
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)
Metodi
ClearCharacterAppearance
La funzione ClearCharacterAppearance rimuove tutte le Accessory , Shirt , Pants , CharacterMesh e BodyColors dal giocatore dato Player.Character .Inoltre, rimuove anche la T-Shirt Decal sul torso del giocatore.La parte del corpo del personaggio del colore e la faccia rimarranno invariate.Questo metodo non fa nulla se il giocatore non ha un Personaggio.
Non rimuove t-shirts , mesh della testa o facce.
Restituzioni
Campioni di codice
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
La funzione DistanceFromCharacter Player restituisce la distanza tra la testa del personaggio e il punto dato Vector3.Restituisce 0 se il giocatore non ha Player.Character .
Questo è utile quando si determina la distanza tra un giocatore e un altro oggetto o luogo in gioco.
Se vuoi determinare la distanza tra due istanze o posizioni non giocatrici, puoi usare quanto segue:
local distance = (position1 - position2).Magnitude
Parametri
La posizione da cui viene misurata la distanza del giocatore verso.
Restituzioni
La distanza in studs tra il giocatore e la posizione.
Campioni di codice
This example demonstrates how to measure the distance between a player's Player.Character and another location.
This code will print the distance of each player's character from the origin (0, 0, 0):
local Players = game:GetService("Players")
for _, player in pairs(Players:GetPlayers()) do
print(player:DistanceFromCharacter(Vector3.new(0, 0, 0)))
end
GetJoinData
Restituisce un dizionario che contiene informazioni su come il Player si unisce all'esperienza. Il dizionario contiene uno qualsiasi dei seguenti campi:
<th>Tipo di valore</th><th>Descrizione</th></tr></thead><tbody><tr><th>ID gioco di origine</th><td>numbero</td><td>Il <code>Class.DataModel.GameId</code> dell'esperienza da cui è stato teletrasportato il <code>Giocatore</code>.Presente solo se il giocatore si teletrasporta nell'esperienza attuale e se un server chiama la funzione di teletrasporto.</td></tr><tr><th>Id luogo diorigine</th><td>numbero</td><td>Il <code>Class.DataModel.PlaceId</code> del luogo in cui il <code>Giocatore</code> è stato teletrasportato.Presente solo se il giocatore si teletrasporta al luogo attuale e un server chiama la funzione di teletrasporto.</td></tr><tr><th>Referito da PlayerId</th><td>numbero</td><td>Il <code>Class.Player.UserId</code> del giocatore che ha invitato il giocatore attuale all'esperienza.Usa questi dati per identificare il referente e attivare la logica di ricompensa.</td></tr><tr><th>Memberi</th><td>array</td><td>Un array che contiene i numeri <code>Class.Player.UserId</code> degli utenti teletrasportati insieme al <code>Giocatore</code>.Presente solo se il giocatore si è teletrasportato come parte di un gruppo.</td></tr><tr><th>Teletrasporta dati</th><td>variabile</td><td>Riflette il <code>teleportData</code> specificato nell'originale teletrasporto.Utile per la condivisione delle informazioni tra i server ai quali il giocatore si teletrasporta.Solo presente se <code>teleportData</code> è stato specificato e un server chiama la funzione di teletrasporto.</td></tr><tr><th>Dati di avvio</th><td>struttura</td><td>Una stringa codificata in plain o JSON che contiene i dati di lancio specificati in un <a href="/production/promotion/deeplinks">deep link</a> URL o <code>Class.ExperienceInviteOptions.LaunchData</code>.</td></tr><tr><th>GameJoinContext</th><td>dizionario</td><td>Un dizionario che include informazioni rilevanti in base al contesto della partecipazione al gioco. Contiene le seguenti chiavi:<ul><li><code>JoinSource</code> : <code>Enum.JoinSource</code></li><li><code>Tipo di oggetto</code> : opzionale <code>Enum.AvatarItemType</code></li><li><code>ID oggetto</code> : opzionale <code>stringa</code> ></li><li><code>AssetId</code> : opzionale <code>stringa</code> ></li><li><code>Tipo di oggetto</code> : opzionale <code>Enum.AssetType</code> ></li></ul></td></tr></tbody>
Chiave |
---|
Ottieni JoinData e TeleportData
Se un server inizia il teletrasporto del giocatore, il dizionario che questo metodo restituisce include i dati di teletrasporto del giocatore.Il metodo Player:GetJoinData() può essere utilizzato solo per recuperare i dati di teletrasporto sul server.Per recuperare i dati sul client, usa TeleportService:GetLocalPlayerTeleportData() .
A differenza di TeleportService:GetLocalPlayerTeleportData() , Player:GetJoinData() fornisce solo dati di teletrasporto che soddisfano i seguenti criteri di sicurezza:
- È garantito di essere stato inviato da un server Roblox nelle ultime 48 ore.
- È garantito di essere stato inviato con questo Player .
- I SourcePlaceId e SourceGameId sono garantiti di essere il luogo e l'universo da cui sono stati inviati i dati.Questo significa che puoi verificare che i dati di teletrasporto provengono da un luogo approvato.
Poiché questi dati vengono trasmessi dal client, possono ancora essere potenzialmente abusati da un exploiter.I dati sensibili come la valuta del giocatore devono essere trasmessi tramite una soluzione sicura come Memorie di memoria.
Restituzioni
Un dizionario che contiene i valori PlaceId e UserId (vedi tabella nella descrizione).
Campioni di codice
The following example tracks sources of traffic for analytics. By creating URLs with unique launch data for each social platform, you can determine the most popular traffic sources. The sample checks the source against a list of possible samples and discards any invalid sources because users can modify the launch data.
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)
The following example generates a URL with the user's ID used as launch data. It then displays the URL in a read-only text box that makes it easy for the user to copy and share the link with their friends. When a user joins the game using a referral link, you can use the launch data to reward the referrer.
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)
The following example is a function that converts a table into a string you can use as launch data. The provided data is JSON encoded, checked for valid character length, and escaped with percent signs.
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
The following example attempts to decode launch data, using pcall to prevent an error in case the data is corrupt.
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)
The following code sample is an example of how teleport data can be retrieved on the server using Player:GetJoinData(). This code, when ran in a Script in ServerScriptService, will listen for new Player|Players joining the game. When they join it will retrieve their teleport data (verifying it came from a valid place) to find their current level.
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
La funzione GetMouse Player restituisce il Mouse utilizzato dal client.L'istanza del mouse del giocatore può essere utilizzata per tracciare l'input del mouse dell'utente, inclusi i clic del pulsante sinistro e destro del mouse e il movimento e la posizione.
Il servizio UserInputService fornisce funzioni e eventi aggiuntivi per tracciare l'input dell'utente - in particolare per i dispositivi che non utilizzano un mouse.
Nota:
- Questo oggetto deve essere utilizzato in un LocalScript per funzionare come previsto online.
- Dopo un aggiornamento nel luglio 2014, l'icona del mouse può ora essere impostata con questo metodo.
Restituzioni
Campioni di codice
The below example will print:
Button 1 is down
whenever the Players.LocalPlayer left clicks.
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
GetNetworkPing restituisce il ritardo di rete isolato del Player in secondi.Il "Ping" è una misura del tempo necessario per l'invio dei dati dal client al server, quindi di nuovo.Non coinvolge la deserializzazione o il processamento dei dati.
Per la parte client LocalScripts , questa funzione può essere chiamata solo sul Players.LocalPlayer .Questa funzione è utile per identificare e risolvere i problemi che si verificano in scenari di alta latenza di rete.È anche utile per mascherare il ritardo, come regolare la velocità di lancio delle animazioni per i proiettili.
Restituzioni
HasAppearanceLoaded
La funzione HasAppearanceLoaded Player restituisce se l'aspetto del giocatore Player.Character è stato caricato o meno.
L'aspetto di un giocatore include oggetti come il giocatore di Shirt, Pants e Accessories.
Questo è utile quando si determina se l'aspetto di un giocatore si sia caricato dopo che si è unito per la prima volta al gioco, che può essere tracciato utilizzando l'evento Players.PlayerAdded.
Restituzioni
Un booleano che indica se l'aspetto del personaggio del giocatore è stato caricato o meno.
Campioni di codice
Questo esempio stampa il risultato di Player:HasAppearanceLoaded() dopo che un giocatore si unisce al gioco fino a quando l'aspetto del giocatore non è stato caricato.
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
Restituisce un valore booleano che indica lo stato di verifica del giocatore.Quando è vero, il giocatore viene verificato.La verifica include, ma non è limitata a, il numero di telefono non VOIP o la verifica dell'ID del governo.
Quando implementi IsVerified, esercita cautela per assicurarti che l'implementazione non blocchi involontariamente tutti gli utenti non verificati.
Nota che il metodo può essere chiamato solo sul server backend.Chiamarlo risultati lato client porta a un errore.Inoltre, questo metodo restituirà sempre false in Studio.
Restituzioni
Un booleano che indica se il giocatore è verificato.
Campioni di codice
The following example prints "true" if the player is verified.
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
Il metodo Kick() consente a un'esperienza di disconnettersi elegantemente da un client e di fornire opzionalmente un messaggio all'utente disconnesso.Questo è utile per moderare gli utenti abusivi.Dovresti consentire solo agli utenti specifici di cui ti fidi di attivare questo metodo su altri utenti.
Chiamare questo metodo su un Player senza argomenti disconnette l'utente dal server e fornisce un messaggio di avviso predefinito.Chiamare questo metodo su un Player insieme a una stringa come primo argomento che sostituisce il messaggio predefinito con la stringa fornita.
Quando si utilizza questo metodo da un LocalScript , solo il client dell'utente locale può essere espulso.
Parametri
Il messaggio da mostrare all'utente dopo l'espulsione.
Restituzioni
Move
La funzione Movimento Player fa in modo che il personaggio del giocatore cammini nella direzione data fino a quando non viene fermato o interrotto dal giocatore (utilizzando i suoi controlli).
Questo è utile quando si scripta NPC Humanoids che si muovono intorno a una mappa - ma non sono controllati dall'input di un giocatore reale.
Nota che il secondo argomento della funzione indica se il giocatore fornito dovrebbe muoversi rispetto alle coordinate mondiali ( false ) o al giocatore di ( vero ).
Parametri
La direzione Vector3 in cui il giocatore dovrebbe muoversi.
Un booleano che indica se il giocatore dovrebbe muoversi rispetto alla fotocamera del giocatore.
Restituzioni
Campioni di codice
Demonstrates moving a player relative to their camera's position using Player:Move().
The script first waits for the player's Character and Humanoid to load, as both are required before calling Player:Move(). Otherwise a warning will display in the Output.
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
La funzione SetAccountAge imposta il Player.AccountAge del giocatore in giorni.
Viene utilizzato per impostare la proprietà Player che descrive quanto tempo fa l'account di un giocatore è stato registrato in giorni.
Questo non imposta l'età del giocatore sull'account, ma l'età dell'account stesso rispetto a quando è stato creato per la prima volta.
Parametri
L'età dell'account in giorni.
Restituzioni
Campioni di codice
This example demonstrates how the Player:SetAccountAge() function would be used if it was accessible. It sets the local player's account age to 100 days.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetAccountAge(100)
Questo esempio di codice aggiunge un segno ai giocatori che mostra quanto tempo è vecchio il loro account.Il segno utilizza l'età dell'account di un giocatore per determinare se sono un Nuovo Giocatore, Giocatore Veterano o Giocatore Regolare.
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- una settimana
local MIN_AGE_VETERAN = 365 -- uno anno
-- Questa funzione segna una parte con testo utilizzando un 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) -- Riempi genitore
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Aggiungi alla parte
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)
-- Ascolta questo giocatore che si sta generando
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
SetSuperSafeChat
Questo metodo imposta se il giocatore veda o meno la chat filtrata da TextService:FilterStringAsync() piuttosto che le chat normali.
local Players = game:GetService("Players")local player = Players.LocalPlayerplayer:SetSuperSafeChat(true)
Indipendentemente dal fatto che un giocatore abbia attivato la chat filtrata, tutta la chat dovrebbe essere filtrata da TextService quando trasmessa ad altri giocatori o sullo schermo del giocatore.TextService:FilterStringAsync() restituisce un oggetto TextFilterResult che può essere filtrato in modo diverso in base all'uso previsto del messaggio.
Parametri
Un booleano che indica se il giocatore veda o meno la chat filtrata.
Restituzioni
GetFriendsOnline
Questa funzione restituisce un array di dizionari di amici online, limitato dal valore maxFriends. La funzione utilizza una cache di 30 secondi.
Nell'array restituito, alcuni campi sono presenti solo per determinati tipi di posizione.Ad esempio, PlaceId non sarà presente quando LocationType è 0 (Sito Web mobile).
<th>Tipo</th><th>Descrizione</th></tr></thead><tbody><tr><td><b>VisitorId</b></td><td>numbero</td><td>Il <code>Class.Player.UserId</code> dell'amico.</td></tr><tr><td><b>Nome utente</b></td><td>struttura</td><td>Il nome utente del amico.</td></tr><tr><td><b>Nome da mostrare</b></td><td>struttura</td><td>Il <code>Class.Player.DisplayName</code> dell'amico.</td></tr><tr><td><b>Ultimo Online</b></td><td>struttura</td><td>Quando l'amico è stato l'ultima volta online.</td></tr><tr><td><b>È online</b></td><td>booleano</td><td>Se l'amico è attualmente online.</td></tr><tr><td><b>Ultima posizione</b></td><td>struttura</td><td>Il nome della posizione attuale dell'amico.</td></tr><tr><td><b>LuogoId</b></td><td>numbero</td><td>L'ID del luogo dell'ultima posizione del amico.</td></tr><tr><td><b>ID gioco</b></td><td>struttura</td><td>Il <code>DataModel/JobId</code> dell'ultima posizione del amico.</td></tr><tr><td><b>LocationType</b></td><td>numero</td><td>Il tipo di posizione dell'ultima posizione del amico: 0 > Sito Web mobile > > 1 > Sito Web in gioco mobile > > 2 > 3 > 4 > 5 > 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1> 1</td></tr></tbody>
Nome |
---|
Parametri
Il numero massimo di amici online da restituire.
Restituzioni
Un dizionario di amici online (vedi la tabella sopra).
Campioni di codice
Questo esempio mostra come ottenere un dizionario degli amici online di un giocatore.Restituisce il numero massimo di amici specificato dall'argomento, o 200 se un argomento non viene fornito.
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
La funzione GetRankInGroup Player restituisce il grado del giocatore nel gruppo come intero tra 0 e 255, dove 0 è un non membro e 255 è il proprietario del gruppo.
Usare questo in un Script , a differenza di un LocalScript , non ti fornirà le informazioni più aggiornate.Se un giocatore lascia un gruppo mentre è nel gioco, GetRankInGroup penserà ancora che è in quel gruppo fino a quando non se ne andrà.Tuttavia, ciò non accade quando viene utilizzato con uno script locale.
Questo perché il metodo memorizza i risultati, quindi più chiamate di GetRankInGroup sul medesimo giocatore con lo stesso ID gruppo produrranno lo stesso risultato come quando il metodo è stato chiamato per la prima volta con l'ID gruppo dato.Il comportamento di cache è su base peer-to-peer: un server non condivide la stessa cache con un client.
Parametri
Il groupId del gruppo specificato.
Restituzioni
Il grado del giocatore nel gruppo.
Campioni di codice
The code below will check if a player that has entered the game has a rank equal to 255, in a group with an ID of 2. If they are, it will print "Player is the owner of the group, 'LOL'!", otherwise "Player is NOT the owner of the group, 'LOL'!" will be printed to the output.
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
La funzione GetRoleInGroup Player restituisce il ruolo del giocatore nel gruppo come una stringa, o Guest se il giocatore non fa parte del gruppo.
Usare questo in un Script , a differenza di un LocalScript , non ti fornirà le informazioni più aggiornate.Se un giocatore lascia un gruppo mentre è nel gioco, GetRoleInGroup penserà ancora che è in quel gruppo fino a quando non se ne andrà.Tuttavia, ciò non accade quando viene utilizzato con uno script locale.
Questo perché il metodo memorizza i risultati, quindi più chiamate di GetRoleInGroup sul medesimo giocatore con lo stesso ID gruppo produrranno lo stesso risultato come quando il metodo è stato chiamato per la prima volta con l'ID gruppo dato.Il comportamento di cache è su base peer-to-peer: un server non condivide la stessa cache con un client.
Parametri
Il gruppoId del gruppo specificato.
Restituzioni
Il ruolo del giocatore nel gruppo specificato, o Guest se il giocatore non è un membro.
Campioni di codice
The code below will print the name of the rank that the player is currently a part of, in a specific group. In this instance we're checking what rank the player is within a group which has a group ID of 2.
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
Questa funzione invia una richiesta al sito Web di Roblox chiedendo se un giocatore è un amico di un altro utente, dato il Player.UserId di quell'utente.Questa funzione memorizza i risultati in modo che più chiamate della funzione sullo stesso giocatore con lo stesso Player.UserId non possano produrre il risultato più aggiornato.Questo non accade quando viene utilizzato in un LocalScript .
Parametri
Il Player.UserId del giocatore specificato.
Restituzioni
Un booleano che indica se un giocatore è un amico dell'utente specificato.
Campioni di codice
The below example would print whether or not a recently added player is friends with Gordonrox24.
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
La funzione IsInGroup Player invia una richiesta al sito Web di Roblox chiedendo se un giocatore è membro di un gruppo, dato l'ID di quel gruppo.
Usare questo in un Script , a differenza di un LocalScript , non ti fornirà le informazioni più aggiornate.Se un giocatore lascia un gruppo mentre è nel gioco, IsInGroup penserà ancora che è in quel gruppo fino a quando non se ne andrà.Tuttavia, ciò non accade quando viene utilizzato con uno script locale.
Questo perché il metodo memorizza i risultati, quindi più chiamate di IsInGroup sul medesimo giocatore con lo stesso ID gruppo daranno lo stesso risultato come quando il metodo è stato chiamato per la prima volta con l'ID gruppo dato.Il comportamento di cache è su base peer-to-peer: un server non condivide la stessa cache con un client.
Parametri
Il gruppoId del gruppo specificato.
Restituzioni
Un booleano che indica se il giocatore è nel gruppo specificato.
Campioni di codice
The below example will print "Player is in the Roblox Fan club!" if the newly added player is in the group with a groupId of 7.
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
La funzione LoadCharacter Player crea un nuovo personaggio per il giocatore, rimuovendo quello vecchio.Rimuove anche Backpack e PlayerGui del giocatore.
Questo è utile nei casi in cui vuoi ricaricare il personaggio senza uccidere il giocatore, come quando vuoi caricare un nuovo aspetto del personaggio dopo aver cambiato l'Player.CharacterAppearance del giocatore.
Nota: la funzione è simile a Player:LoadCharacterBlocking() , ma la richiesta viene elaborata in modo asincrono invece di sincronizzato.Questo significa che altre attività potranno continuare mentre il personaggio viene caricato, incluso il rendering del gioco e qualsiasi altra attività.Inoltre, questa funzione può essere utilizzata in uno script, mentre LoadCharacterBlocking non può.
Dopo aver chiamato LoadCharacter per un giocatore individuale, non è consigliato chiamarlo nuovamente per lo stesso giocatore fino a quando non è stato attivato l'evento Player.CharacterAppearanceLoaded di quel giocatore.
Ordine di caricamento del personaggio
Chiamare il Player:LoadCharacter() con un Avatar R15 accende eventi nell'ordine seguente (Nota: l'ordine R6 è diverso):
- Set di Player.Character
- Player.CharacterAdded incendi
- Player.Changed lancia con un valore di "Character"
- L'aspetto del personaggio si inizializza
- Player.CharacterAppearanceLoaded lancia
- Character.Parent imposta sul DataModel
- La costruzione del personaggio e le dimensioni del personaggio
- Il personaggio si muove alla posizione di spawn
- Caricamento del personaggio di ritorno
Restituzioni
Campioni di codice
This script turns off auto-loading and simulates character respawning.
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
Questa funzione genera un avatar in modo che abbia tutto equipaggiato nel passato in HumanoidDescription .
Dopo aver chiamato LoadCharacterWithHumanoidDescription per un giocatore individuale, non è consigliato chiamare nuovamente la funzione per lo stesso giocatore fino a quando non è stato attivato l'evento Player.CharacterAppearanceLoaded di quel giocatore.
Vedi anche:
- Sistema di descrizione umanoide, un articolo che spiega il sistema di descrizione umanoide in maggior dettaglio e fornisce diversi esempi di script
Parametri
Un HumanoidDescription contenente tratti come parti del corpo/colori, ridimensionamento del corpo, accessori, abbigliamento e animazioni che saranno equipaggiati al personaggio caricato.
Restituzioni
Campioni di codice
To create a HumanoidDescription and then spawn a character with that description applied, add a Script (not a LocalScript) to the workspace and add this code to it.
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)
RequestStreamAroundAsync
Per le esperienze in cui lo streaming dell'istanza è abilitato, richieste che il server trasmetta alle regioni del giocatore (parti e terreno) intorno alla posizione specificata X , Y , Z nella 3D world.È utile se l'esperienza sa che il giocatore di CFrame sarà impostato nella posizione specificata nel prossimo futuro.Senza fornire la posizione con questa chiamata, il giocatore potrebbe non aver trasmesso contenuti per la destinazione, causando una pausa di streaming o un altro comportamento indesiderato.
L'effetto di questa chiamata sarà temporaneo e non ci sono garanzie di ciò che verrà trasmesso intorno alla posizione specificata.I limiti di memoria del client e le condizioni di rete possono influenzare ciò che sarà disponibile sul client.
Precauzione d'uso
Richiedere lo streaming intorno a un'area non è una garanzia che il contenuto sarà presente quando la richiesta viene completata, poiché lo streaming è influenzato dalla larghezza di banda della rete del client, dalle limitazioni di memoria e da altri fattori.
Parametri
Posizione mondiale in cui viene richiesto lo streaming.
Tempo limite opzionale per la richiesta, la durata massima che il motore tenta di trasmettere le regioni intorno al parametro position prima di abbandonare la richiesta.Se non specifici un valore, il timeout è effettivamente infinito.Tuttavia, se il client è a memoria bassa, il motore abbandona tutte le richieste di streaming, anche quelle che sono ancora entro la durata del timeout.
Restituzioni
Eventi
CharacterAdded
L'evento CharacterAdded si attiva quando il personaggio di un giocatore si genera (o si rigenera).Questo evento si attiva poco dopo aver impostato Player.Character a un valore non nil o chiamando Player:LoadCharacter() , che è prima che il personaggio venga parented al Workspace .
Questo può essere utilizzato insieme all'evento Player.CharacterRemoving, che si attiva poco prima che il personaggio di un giocatore venga rimosso, tipicamente dopo la morte.Come tale, entrambi questi eventi possono potenzialmente scatenare molte volte come i giocatori muoiono quindi respawn in un luogo.Se vuoi rilevare quando un giocatore si unisce o lascia il gioco, usa gli eventi Players.PlayerAdded e Players.PlayerRemoving invece.
Nota che il Humanoid e le sue parti del corpo predefinite (testa, torso e arti) esisteranno quando si attiva questo evento, ma gli articoli di abbigliamento come Hats , Shirts e Pants potrebbero richiedere alcuni secondi per essere aggiunti al personaggio.Connect Instance.ChildAdded sul personaggio aggiunto per rilevare questi, o attendere l'evento Player.CharacterAppearanceLoaded per essere sicuri che il personaggio abbia tutto equipaggiato.
Parametri
Un'istanza del personaggio che si è generato/reattivato.
Campioni di codice
This code sample demonstrates the usage of Players.PlayerAdded, Player.CharacterAdded and Player.CharacterRemoving in order to detect the spawning and despawning of players' characters. You can use this as a boilerplate script to make changes to players' characters as they spawn, such as changing Humanoid.WalkSpeed.
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)
This code sample will cause players to respawn at the same place they died. It does this by keeping track of where the player despawned using Player.CharacterRemoving. Note that the player's location is saved on-despawn, not on-death. This can be problematic if the player falls off a ledge and dies due to Workspace.FallenPartsDestroyHeight - their respawn position won't be saved in this case.
It's also important to note the need to "forget" the location of players who leave the game. We use Instance.ChildRemoved on Players instead of Players.PlayerRemoving. This is because PlayerRemoving fires before CharacterRemoving - and we need to make sure we don't forget the player's respawn location then immediately remember a new one (this is a memory leak; potentially many players could visit, respawn and leave). So, we use ChildRemoved on Players so the event fires after the character is removed.
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)
Questo esempio di codice rimuove automaticamente Accessory oggetti come cappelli dal personaggio di Player quando respawn.Attenzione: questo include i capelli, quindi questo script può causare alopecia acuta.
Quando il Character() è added , aspettiamo che RunService.Stepped venga fuoco una volta (utilizzando la funzione wait degli eventi).Questo è così che la logica di rimozione degli accessori esegue un frame dopo lo spawn del personaggio.Un avviso può apparire se elimini gli accessori troppo rapidamente dopo che il giocatore si è generato, quindi l'attesa di un frame eviterà questo.
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)
-- Aspetta un breve momento prima di rimuovere gli accessori per evitare il
-- Avviso "Qualcosa inaspettatamente impostato ___ padre a NULL"
RunService.Stepped:Wait()
-- Controlla eventuali accessori esistenti nel personaggio del giocatore
for _, child in pairs(character:GetChildren()) do
destroyAccessory(child)
end
-- I cappelli possono essere aggiunti al personaggio un momento dopo
-- CharacterAdded fiamme, quindi ascoltiamo quelli che utilizzano ChildAdded
character.ChildAdded:Connect(destroyAccessory)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
CharacterAppearanceLoaded
Questo evento si attiva quando l'intero aspetto di un Player.Character è stato inserito.
Un Player.Character generalmente ha una gamma di oggetti che modificano il suo aspetto, tra cui Accoutrements , Shirts , Pants e CharacterMeshes .Questo evento si attiverà quando tutti questi oggetti saranno stati inseriti nel Player.Character .
Questo evento si attiva solo sul server.
Un uso per questo evento è garantire che tutti gli accessori siano stati caricati prima di distruggerli. Vedi qui sotto per un esempio di questo.
Parametri
Il Class.Player.Character``Class.Model.
Campioni di codice
This code sample will wait for accessories to fully load, print out how many there are, and then destroy them all.
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
L'evento CharacterRemoving si attiva poco prima che il personaggio di un giocatore venga rimosso, come quando il giocatore viene rigenerato.
Questo evento può essere utilizzato insieme all'evento Player.CharacterAdded, che si attiva quando il personaggio di un giocatore si genera o si rigenera.Ad esempio, se vuoi stampare un messaggio ogni volta che un giocatore si genera e muore:
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)
Questo evento riguarda solo il Character di un Player.Se invece devi tracciare quando un giocatore si unisce/lascia il gioco, usa gli eventi Players.PlayerAdded e Players.PlayerRemoving.
Parametri
Un'istanza del personaggio che viene rimossa.
Campioni di codice
Questo esempio stampa il nome del personaggio che viene rimosso, seguito da "è morto".
Ad esempio, se il personaggio di Shedletsky dovesse morire in gioco, verrebbe stampata "Shedletsky è morto".
game.Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(function(character)
print(character.Name .. " has died.")
end)
end)
Chatted
L'evento di chat si attiva quando un Player digita un messaggio e premere invio nella barra di chat fornita da Roblox.Questo viene fatto utilizzando alcune bindings Luau dallo script di chat predefinito.Puoi impedire ai giocatori di chattare usando StarterGui:SetCoreGuiEnabled() e disabilitando la Chat Enum.CoreGuiType .
Comandi di chat
Usando questo evento e alcune funzioni di manipolazione delle stringhe come string.sub() e string.lower(), è possibile creare comandi di chat, anche con argomenti come i nomi dei giocatori.Di solito, i comandi sono prefissati come heal PlayerName .Per controllare un prefisso in una stringa, usa string.sub() sul messaggio per controllare una sottostringa del messaggio: string.sub(message, 1, 6) == "/heal " (nota l'inclusione dello spazio).Quindi, estrai il resto del comando usando di nuovo string.sub() : string.sub(message, 7) sarà uguale al nome del giocatore.Verifica se quel giocatore esiste e, in caso affermativo, esegui l'azione del comando (in questo esempio, curandoli).Controlla gli esempi di codice per esempi di comandi di chat.
Filtraggio
Il testo del messaggio lanciato con questo evento è non filtrato .Se stai mostrando l'input del giocatore come chat ad altri giocatori in qualsiasi forma, deve essere filtrato usando Chat:FilterStringAsync() .Tieni questo a mente quando crei i tuoi sistemi di chat; se il tuo gioco non filtra correttamente la chat potrebbe essere presa un'azione di moderazione contro di esso.
Parametri
Il contenuto del messaggio digitato dal giocatore in chat.
Deprecated. Per i messaggi sussurrati, questo era il giocatore che era il bersaglio previsto del messaggio di chat.
Campioni di codice
Setting chatted for all players. There is an easy way to make the Chatted event registered on all players. Simply use the Players.PlayerAdded event in combination with this event.
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)
This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" 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)
This code sample allows any player to chat "/jointeam " where is the name of a team. It uses string manipulation using string.sub and string.lower to make the command case-insensitive and allow for partial matches. For example, "/jointeam red" will match the team "Red Robins".
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
Questo evento si attiva approssimativamente due minuti dopo che il motore di gioco classifica il player come inattivo.Il tempo è il numero di secondi trascorsi da quel punto.L'evento continua a fuoco ogni 30 secondi finché il giocatore rimane inattivo.
Questo evento si attiva solo negli script del client, non negli script del server; usa un RemoteEvent per avvisare il server di giocatori inattivi.
Roblox disconnette automaticamente i giocatori che sono stati inattivi per almeno 20 minuti, quindi questo evento è utile per avvisare i giocatori che saranno disconnessi presto, disconnettendo i giocatori prima di quei 20 minuti o altre funzionalità AFK lontane dalla tastiera.
Per tracciare con quale frequenza si verificano le disconnessioni automatiche, prova a correlare questo evento con le occorrenze di Players.PlayerRemoving .
Parametri
Il tempo in secondi in cui il giocatore è stato inattivo.
Campioni di codice
Prints how long a player has been idle for.
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
Sparato quando lo stato di teletrasporto di un giocatore cambia. Questo evento è utile per determinare se una teletrasportazione sia stata riuscita.
Cos'è lo stato di teletrasporto?
Quando viene fatta una richiesta di teletrasporto utilizzando TeleportService, ci sono una serie di fasi prima che il Player venga teletrasportato.La fase attuale è rappresentata dal valore Enum.TeleportState che viene fornito da OnTeleport.Vedi qui sotto per un esempio pratico di questo.
Parametri
Il nuovo Enum.TeleportState della Player.
Il nome dello spawn a cui teletrasportarsi, se TeleportService:TeleportToSpawnByName() è stato utilizzato.
Campioni di codice
This example prints which stage of a teleport a player is at, as well as printing if the teleport was a failure.
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)