RunService
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
RunService contiene metodi e eventi per la gestione del tempo nonché per la gestione del contesto in cui un'esperienza o uno script è in esecuzione.Metodi come IsClient() , IsServer() e IsStudio() possono aiutarti a determinare in quale contesto viene eseguito il codice.Questi metodi sono utili per ModuleScripts che possono essere richiesti sia dagli script del client che del server.Inoltre, IsStudio() può essere utilizzato per aggiungere comportamenti speciali per i test in Studio.
RunService ospita anche eventi che consentono al tuo codice di aderire al ciclo frame‑by‑frame di Roblox, come PreRender , PreAnimation , PreSimulation , PostSimulation e Heartbeat .Selezionare l'evento appropriato da utilizzare in qualsiasi caso è importante, quindi dovresti leggere Programmatore di attività per prendere una decisione informata.
Risultati del test di contesto
<th><code>Class.RunService:IsStudio()|IsStudio</code></th><th><code>Class.RunService: IsClient()|IsClient</code></th><th><code>Class.RunService:IsServer()|IsServer</code></th><th><code>Class.RunService:IsEdit()|IsEdit</code></th><th><code>Class.RunService: è in esecuzione()|IsRunning</code></th><th><code>Class.RunService:IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>Giocatore dal vivo</td><td><code>falso</code> ></td><td><code>vero</code> ></td><td><code>falso</code> ></td><td /><td /><td /></tr><tr><td>Server dal vivo</td><td><code>falso</code> ></td><td><code>falso</code> ></td><td><code>vero</code> ></td><td /><td /><td /></tr><tr><td>Modalità di modifica</td><td><code>vero</code></td><td><code>vero</code></td><td><code>vero</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>fallito</code></td></tr><tr><td>Modifica collaborativa</td><td><code>vero</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>fallito</code></td></tr><tr><td>Modalità esecuzione</td><td><code>vero</code></td><td><code>vero</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>vero</code></td></tr><tr><td>Modalità di gioco (client)</td><td><code>vero</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td></tr><tr><td>Modalità di gioco (server)</td><td><code>vero</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>vero</code></td></tr><tr><td>Test di squadra (giocatore)</td><td><code>vero</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td></tr><tr><td>Test di squadra (server)</td><td><code>fallito</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td><td><code>vero</code></td><td><code>fallito</code></td></tr></tbody>
Ambiente |
---|
Sommario
Proprietà
Metodi
Dato un nome di stringa di una funzione e una priorità, questo metodo lega la funzione a RunService.PreRender .
Restituisce se l'ambiente attuale è in esecuzione sul client.
Restituisce se l'ambiente attuale è in modalità Edit .
Restituisce se il pulsante Esegui è stato premuto per eseguire la simulazione in Studio.
Restituisce se l'esperienza è attualmente in esecuzione.
Restituisce se l'ambiente attuale è in esecuzione sul Server.
Restituisce se l'ambiente attuale è in esecuzione in Studio.
Interrompe la simulazione dell'esperienza se è in esecuzione, sospendendo fisica e script.
Esegue la simulazione del Gioco, eseguendo fisica e script.
Interrompe la simulazione dell'esperienza se è in esecuzione.
Diselega una funzione che era stata legata al ciclo di rendering usando RunService:BindToRenderStep() .
Eventi
Fuoca ogni frame, dopo che la simulazione fisica è completata.
Fuoca ogni frame, dopo che la simulazione fisica è completata.
Fuoca ogni frame, prima della simulazione fisica ma dopo il rendering.
Fuoca ogni frame, prima che il frame venga reso.
Fuoca ogni frame, prima della simulazione fisica.
Fuoca ogni frame, prima che il frame venga reso.
Fuoca ogni frame, prima della simulazione fisica.
Proprietà
ClientGitHash
RunState
Metodi
BindToRenderStep
La funzione BindToRenderStep() lega una funzione personalizzata da chiamare a un'ora specifica durante il passo di rendering.Ci sono tre argomenti principali: name , priority , e cosa function chiamare.
Poiché è legato al processo di rendering del client, BindToRenderStep() può essere chiamato solo sul client.
Nome
Il parametro name è un'etichetta per il binding e può essere utilizzato con RunService:UnbindFromRenderStep() se il binding non è più necessario.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Lega la funzione sopra alla bind chiamata "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Diselega la funzione legata a "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Priorità
Il priority della bind è un Integro; determina quando durante il passo di rendering chiamare la funzione personalizzata.Più basso è questo numero, prima verrà chiamata la funzione personalizzata.Se due binding hanno la stessa priorità, il motore Roblox sceglierà casualmente uno per eseguire prima.Gli script di controllo predefiniti di Roblox vengono eseguiti con queste priorità specifiche:
- Input del giocatore: 100
- Controlli della fotocamera: 200 Per convenienza; l'enumero Enum.RenderPriority può essere utilizzato per determinare il valore intero per impostare un legame.Ad esempio, per creare un diritto di vincolo prima dell'Aggiornarmentodella fotocamera predefinita, semplice sottrarre 1 dalla Livellodella fotocamera.
Quando si utilizza Enum.RenderPriority , ricorda di utilizzare .Value alla fine dell'Enum desiderata. RunService:BindToRenderStep() non funzionerà se solo l'Enum viene utilizzata da Proprio.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Il codice qui sarà eseguito prima dello script della fotocamera predefinita di Roblox
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Funzione personalizzata e tempo Delta
L'ultimo argomento ( function ) è la funzione personalizzata da chiamare.Questa funzione verrà passata un parametro chiamato deltaTime che mostra quanto tempo è passato tra l'inizio del precedente passo di rendering e l'inizio del passo di rendering attuale.
Tutti gli aggiornamenti di rendering attenderanno fino a quando il codice nel passo di rendering non finisce.Assicurati che qualsiasi codice chiamato da BindToRenderStep() funzioni rapidamente e in modo efficiente; se il codice richiede troppo tempo, le visuali dell'esperienza saranno scadenti.
Parametri
Etichetta per il binding che può essere utilizzata con Unbind se il binding non è più necessario.
Priorità del binding come Integro; determina quando durante il passo di rendering chiamare la funzione personalizzata.Più basso è questo numero, prima verrà chiamata la funzione personalizzata.Se due binding hanno la stessa priorità, il motore Roblox sceglierà casualmente uno per eseguire prima.
La funzione personalizzata che viene legata.
Restituzioni
Campioni di codice
This code sample moves a GuiObject in a circle within its parent object using RunService's BindToRenderStep. It defines a parametric equation in a function to help with positioning the GuiObject.
To try this code out, put a ScreenGui in the StarterGui. Inside the ScreenGui, insert a Frame with a LocalScript. Paste this code into the LocalScript, then play the game. Watch the Frame travel counterclockwise within.
local RunService = game:GetService("RunService")
-- How fast the frame ought to move
local SPEED = 2
local frame = script.Parent
frame.AnchorPoint = Vector2.new(0.5, 0.5)
-- A simple parametric equation of a circle
-- centered at (0.5, 0.5) with radius (0.5)
local function circle(t)
return 0.5 + math.cos(t) * 0.5, 0.5 + math.sin(t) * 0.5
end
-- Keep track of the current time
local currentTime = 0
local function onRenderStep(deltaTime)
-- Update the current time
currentTime = currentTime + deltaTime * SPEED
-- ...and the frame's position
local x, y = circle(currentTime)
frame.Position = UDim2.new(x, 0, y, 0)
end
-- This is just a visual effect, so use the "Last" priority
RunService:BindToRenderStep("FrameCircle", Enum.RenderPriority.Last.Value, onRenderStep)
--RunService.RenderStepped:Connect(onRenderStep) -- Also works, but not recommended
This example shows how to bind a simple function to the render step. All this function does is print how much time passed between the last render step and the current one. Note that this code will need to be in a LocalScript to run.
local RunService = game:GetService("RunService")
local function checkDelta(deltaTime)
print("Time since last render step:", deltaTime)
end
RunService:BindToRenderStep("Check delta", Enum.RenderPriority.First.Value, checkDelta)
This example uses the RunService to bind and unbind a function named printHello. First, we bind the function to the RenderStep so that fires every step. Then, after we wait 5 seconds (wait(5)), we unbind the function.
local RunService = game:GetService("RunService")
-- Step 1: Declare the function and a name
local NAME = "Print Hello"
local function printHello()
print("Hello")
end
-- Step 2: Bind the function
RunService:BindToRenderStep(NAME, Enum.RenderPriority.First.Value, printHello)
-- Step 3: Unbind the function
RunService:UnbindFromRenderStep(NAME)
IsClient
Se il codice che ha invocato questo metodo viene eseguito in un contesto client (in un LocalScript , in un ModuleScript richiesto da un LocalScript , o in un Script con RunContext impostato su Enum.RunContext.Client , questo metodo restituirà true .In tutti gli altri casi, questo metodo restituirà false .
Se questo metodo restituisce true , l'ambiente attuale può accedere a funzionalità solo client come RunService.PreRender o Players.LocalPlayer .
Restituzioni
Se l'ambiente attuale sta eseguendo il client.
IsEdit
Questo metodo restituisce se l'ambiente attuale è in modalità "Modificare", ad esempio in Studio quando l'esperienza non è in esecuzione.
IsEdit() restituirà l'inverso di IsRunning(), ad eccezione quando la simulazione è stata interrotta, in cui entrambi i metodi restituiranno false .
Restituzioni
Se l'ambiente attuale è in modalità "Modificare".
IsRunMode
Questo metodo restituisce se il pulsante Esegui è stato premuto per eseguire la simulazione in Studio.Continuerà a restituire true se la simulazione è stata interrotta utilizzando il pulsante Pausa ; tuttavia, una volta che è stata interrotta utilizzando il pulsante Stop , tornerà a restituire false .
Nota che Studio entra solo in modalità "Eseguire" quando viene premuto il pulsante Esegui , non il pulsante Gioca .Si noti inoltre che questo metodo restituirà false se la simulazione è stata avviata utilizzando RunService:Run() piuttosto che il pulsante Esegui .
Restituzioni
Se il pulsante Esegui è stato premuto per eseguire la simulazione in Studio.
IsRunning
Restituisce se l'esperienza è attualmente in esecuzione, cioè la simulazione è stata eseguita utilizzando i pulsanti Esegui o Gioca .
IsRunning() restituirà sempre l'inverso di IsEdit() tranne quando la simulazione è stata interrotta, in cui entrambi i metodi restituiranno false .
Restituzioni
Se l'esperienza è attualmente in esecuzione.
IsServer
Questo metodo restituisce se l'ambiente attuale è in esecuzione sul Server.Se il codice che ha invocato questo metodo viene eseguito in un contesto server (in un Script con RunContext impostato su Enum.RunContext.Server o Enum.RunContext.Legacy , o in un ModuleScript richiesto da un Script ), questo metodo restituirà true .In tutti gli altri casi, questo metodo restituirà false .
Se questa funzione restituisce vero, l'ambiente attuale può accedere a funzionalità solo server come ServerStorage o ServerScriptService .
Restituzioni
Se l'ambiente attuale è in esecuzione sul Server.
IsStudio
Questo metodo restituisce se l'ambiente attuale è in esecuzione in Studio. Può essere utilizzato per avvolgere il codice che dovrebbe essere eseguito solo durante il test in Studio.
Restituzioni
Se l'ambiente attuale è in esecuzione in Studio.
Pause
Questo metodo interrompe la simulazione dell'esperienza se è in esecuzione, sospendendo fisica e script.La simulazione può essere avviata utilizzando Run() o il pulsante Esegui in Studio; quando la simulazione viene interrotta, IsRunning() restituirà false .
Restituzioni
Run
Questo metodo esegue la simulazione dell'esperienza (fisica e script).Quando la simulazione è in esecuzione, IsRunning() restituirà true .Tuttavia, IsRunMode() restituirà solo true se la simulazione è stata avviata utilizzando il pulsante Esegui in Studio.
Restituzioni
Stop
Questo metodo interrompe la simulazione dell'esperienza se è in esecuzione.Quando la simulazione viene interrotta, IsRunning() restituirà false e IsEdit() restituirà true.
In contrasto al pulsante Stop in Studio, chiamare questo metodo non ripristinerà l'esperienza allo stato in cui era prima dell'Eseguiredella simulazione.Questo significa che qualsiasi modifica all'esperienza effettuata dalla simulazione fisica e dagli script persisterà dopo che la simulazione sarà terminata.
Restituzioni
UnbindFromRenderStep
Dato un nome di una funzione inviata a BindToRenderStep() , questo metodo dislega la funzione dal essere chiamata durante PreRender .Questo viene utilizzato per dislegare le funzioni legate una volta che non sono più necessarie o quando non hanno più bisogno di attivare ogni passo.
Se non esiste una funzione legata dal nome fornito, questo metodo non intraprende alcuna azione e continua senza sollevare un errore.
Parametri
Il nome della funzione che viene disconnessa.
Restituzioni
Eventi
Heartbeat
L'evento Heartbeat si attiva ad ogni frame, dopo che la simulazione fisica è completata.L'argomento deltaTime indica il tempo trascorso dall'ultimo frame.
Questo evento è quando la maggior parte degli script Eseguireeseguita.Si verifica alla fine di ogni frame e è anche quando vengono eseguiti gli script in attesa, come quelli programmati con la libreria task.Heartbeat è comunemente utilizzato per compiti periodici, come l'aggiornamento dei sistemi di gioco principali come la rigenerazione della salute.
Dopo questo passo, il motore invia aggiornamenti delle proprietà e eventi al server o ai client che vengono successivamente ricevuti come parte del passaggio di ricezione della replicazione replication.
Parametri
Il tempo (in secondi) che è trascorso dall'ultimo frame.
PostSimulation
L'evento PostSimulation si attiva ad ogni frame, dopo che la simulazione fisica è completata.L'argomento deltaTimeSim indica il tempo in cui il quadro attuale ha eseguito la simulazione fisica, senza tenere conto dell'accelerazione fisica.
Questo evento è utile per apportare gli ultimi aggiustamenti al risultato della simulazione. Dopo questa fase, il motore attiva l'evento Heartbeat.
Parametri
Il tempo (in secondi) in cui il quadro attuale ha superato la simulazione fisica, senza tenere conto dell'accelerazione fisica.
PreAnimation
L'evento PreAnimation si attiva ogni frame, prima della simulazione fisica ma dopo il rendering.L'argomento deltaTimeSim indica il tempo in cui il frame attuale ha effettuato le animazioni di passaggio.
Questo evento è utile per modificare gli oggetti di animazione, come regolare la loro velocità o priorità.Una volta completato l'evento PreAnimation, il motore procede ad eseguire queste animazioni, aggiornando le trasformazioni congiunte che verranno utilizzate in seguito per aggiornare gli oggetti durante la simulazione fisica.
Dopo che le animazioni sono state eseguite, il motore attiva l'evento PreSimulation.
Parametri
Il tempo (in secondi) che il quadro attuale ha animazioni passate.
PreRender
L'evento PreRender (sostituzione di RenderStepped ) viene attivato ogni frame, prima che il frame venga visualizzato.L'argomento deltaTimeRender indica il tempo trascorso dall'ultimo frame.
Questo evento ti consente di eseguire il codice e aggiornare il mondo prima che venga disegnato sullo schermo di un Giocatore.Questo è utile per aggiustamenti all'ultimo minuto come la modifica delle posizioni degli oggetti, l'aggiornamento delle animazioni o la preparazione degli effetti visivi, ma dovrebbe essere utilizzato con parsimonia poiché il motore non può iniziare a rendere il frame fino a quando il codice in esecuzione in questo evento non è finito.
Poiché PreRender è lato client, può essere utilizzato solo in un LocalScript , in un ModuleScript richiesto da un LocalScript , o in un Script con RunContext impostato su Enum.RunContext.Client .
Dopo la fase PreRender di simulazione inizia con l'evento PreAnimation.
Parametri
Il tempo (in secondi) che è trascorso dall'ultimo frame.
PreSimulation
L'evento PreSimulation (sostituzione di Stepped ) si attiva ogni frame, prima della simulazione fisica.L'argomento deltaTimeSim indica il tempo in cui il quadro attuale eseguirà la simulazione fisica, senza tenere conto dell'accelerazione fisica.
Questo evento è utile per regolare proprietà come velocità o forze appena prima che vengano applicate come parte della simulazione.La simulazione poi viene eseguita, potenzialmente più volte, poiché il solver fisico funziona con una frequenza maggiore rispetto ad altri sistemi di motore.Una volta completato, viene attivato l'evento PostSimulation.
Parametri
Il tempo (in secondi) in cui il frame attuale eseguirà la simulazione fisica, senza tenere conto dell'accelerazione fisica.
RenderStepped
Fuoca ogni frame, prima che il frame venga reso.
Nota di migrazione
Questo evento è stato superato da PreRender che dovrebbe essere utilizzato per il nuovo lavoro.
Parametri
Il tempo (in secondi) che è trascorso dall'ultimo frame.
Stepped
Fuoca ogni frame, prima della simulazione fisica.
Nota di migrazione
Questo evento è stato superato da PreSimulation che dovrebbe essere utilizzato per il nuovo lavoro.
Parametri
La durata (in secondi) per cui RunService è in esecuzione.
Il tempo (in secondi) che è trascorso dall'ultimo frame.