RunService

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile
Assistenza
Non Replicato

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

  • BindToRenderStep(name : string,priority : number,function : function):()

    Dato un nome di stringa di una funzione e una priorità, questo metodo lega la funzione a RunService.PreRender .

  • Scrivi Parallelo

    Restituisce se l'ambiente attuale è in esecuzione sul client.

  • Sicurezza Plugin
    Scrivi Parallelo

    Restituisce se l'ambiente attuale è in modalità Edit .

  • Scrivi Parallelo

    Restituisce se il pulsante Esegui è stato premuto per eseguire la simulazione in Studio.

  • Restituisce se l'esperienza è attualmente in esecuzione.

  • Scrivi Parallelo

    Restituisce se l'ambiente attuale è in esecuzione sul Server.

  • Scrivi Parallelo

    Restituisce se l'ambiente attuale è in esecuzione in Studio.

  • Pause():()
    Sicurezza Plugin

    Interrompe la simulazione dell'esperienza se è in esecuzione, sospendendo fisica e script.

  • Run():()
    Sicurezza Plugin

    Esegue la simulazione del Gioco, eseguendo fisica e script.

  • Stop():()
    Sicurezza Plugin

    Interrompe la simulazione dell'esperienza se è in esecuzione.

  • Diselega una funzione che era stata legata al ciclo di rendering usando RunService:BindToRenderStep() .

Eventi

Proprietà

ClientGitHash

Sola Lettura
Non Replicato
Sicurezza Script Roblox
Lettura Parallela
Non Replicato
Sicurezza Plugin
Lettura Parallela

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

name: string

Etichetta per il binding che può essere utilizzata con Unbind se il binding non è più necessario.

Valore predefinito: ""
priority: number

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.

Valore predefinito: ""
function: function

La funzione personalizzata che viene legata.

Valore predefinito: ""

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.

Frame Moving in Circle

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.

RunService Custom Function

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.

Bind and Unbind a 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

Scrivi Parallelo

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

Sicurezza Plugin
Scrivi Parallelo

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

Scrivi Parallelo

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

Scrivi Parallelo

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

Scrivi Parallelo

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

()
Sicurezza Plugin

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

()
Sicurezza Plugin

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

()
Sicurezza Plugin

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

name: string

Il nome della funzione che viene disconnessa.

Valore predefinito: ""

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

deltaTime: number

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

deltaTimeSim: number

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

deltaTimeSim: number

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

deltaTimeRender: number

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

deltaTimeSim: number

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

deltaTime: number

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

time: number

La durata (in secondi) per cui RunService è in esecuzione.

deltaTime: number

Il tempo (in secondi) che è trascorso dall'ultimo frame.