RunService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
RunService contiene métodos y eventos para la gestión del tiempo, así como para la gestión del contexto en el que se ejecuta una experiencia o un script.Métodos como IsClient() , IsServer() y IsStudio() pueden ayudarte a determinar bajo qué código de contexto se está ejecutando.Estos métodos son útiles para ModuleScripts que pueden ser requeridos por tanto por los scripts del cliente como del servidor.Además, IsStudio() se puede utilizar para agregar comportamientos especiales para las pruebas en el estudio.
RunService también alberga eventos que permiten que tu código se adhiera al bucle de marco por marco de Roblox, como PreRender , PreAnimation , PreSimulation , PostSimulation y Heartbeat .Seleccionar el evento adecuado para usar en cualquier caso es importante, por lo que debe leer Programador de tareas para tomar una decisión informada.
Resultados de prueba de contexto
<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:Está corriendo()|Está corriendo</code></th><th><code>Class.RunService:IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>Jugador en vivo</td><td><code>falso</code></td><td><code>verdadero</code></td><td><code>falso</code></td><td /><td /><td /></tr><tr><td>Servidor en vivo</td><td><code>falso</code></td><td><code>falso</code> ></td><td><code>verdadero</code> ></td><td /><td /><td /></tr><tr><td>Modo de edición</td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>falso</code></td></tr><tr><td>Edición colaborativa</td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>falso</code></td></tr><tr><td>Modo ejecutar</td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>cierto</code></td></tr><tr><td>Modo de juego (cliente)</td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td></tr><tr><td>Modo de juego (servidor)</td><td><code>cierto</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>cierto</code></td></tr><tr><td>Prueba de equipo (jugador)</td><td><code>cierto</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td></tr><tr><td>Prueba en equipo (servidor)</td><td><code>falso</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td><td><code>cierto</code></td><td><code>falso</code></td></tr></tbody>
Entorno |
---|
Resumen
Propiedades
Métodos
Dada una nombre de cadena de una función y una prioridad, este método vincula la función a RunService.PreRender.
Devuelve si el entorno actual se está ejecutando en el cliente.
Devuelve si el entorno actual está en modo Edit .
Devuelve si el botón Ejecutar se ha presionado para ejecutar la simulación en Studio.
Devuelve si la experiencia está actualmente en ejecución.
Devuelve si el entorno actual se está ejecutando en el servidor.
Devuelve si el entorno actual se está ejecutando en Studio.
Pausa la simulación de la experiencia si está en ejecución, suspendiendo la física y los scripts.
Ejecuta la simulación del juego, ejecutando física y scripts.
Detiene la simulación de la experiencia si se está ejecutando.
Desvincula una función que estaba vinculada al bucle de renderizado usando RunService:BindToRenderStep() .
Eventos
Dispara cada marco, después de que la simulación de física se haya completado.
Dispara cada marco, después de que la simulación de física se haya completado.
Dispara cada marco, antes de la simulación de físicas pero después de renderizar.
Dispara cada marco, antes de que se renderice el marco.
Dispara cada marco, antes de la simulación de físicas.
Dispara cada marco, antes de que se renderice el marco.
Dispara cada marco, antes de la simulación de físicas.
Propiedades
ClientGitHash
RunState
Métodos
BindToRenderStep
La función BindToRenderStep() vincula una función personalizada para ser llamada en un momento específico durante el paso de renderizado.Hay tres argumentos principales: name , priority , y qué function llamar.
Como está vinculado al proceso de renderizado del cliente, BindToRenderStep() solo se puede llamar al cliente.
Nombre
El parámetro name es una etiqueta para el enlace y se puede usar con RunService:UnbindFromRenderStep() si el enlace ya no es necesario.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Vincula la función anterior a la vinculación llamada "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Desvincular la función vinculada a "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Prioridad
El priority de la vinculación es un entero; determina cuándo durante el paso de renderizado llamar la función personalizada.Cuanto menor sea este número, más pronto se llamará la función personalizada.Si dos atajos tienen la misma prioridad, el motor de Roblox elegirá aleatoriamente uno para ejecutarse primero.Los scripts de control predeterminados de Roblox se ejecutan con estas prioridades específicas:
- Entrada del jugador: 100
- Controles de cámara: 200 Por conveniencia; el enumerado Enum.RenderPriority se puede usar para determinar el valor entero para establecer un enlace.Por ejemplo, para hacer un derecho de enlace antes de la actualización predeterminada de la cámara, simplemente resta 1 del nivel de prioridad de la cámara.
Al usar Enum.RenderPriority, recuerde usar .Value al final del enum deseado. RunService:BindToRenderStep() no funcionará si solo se usa el enum por sí en posesión.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- El código aquí se ejecutará antes del scriptde cámara predeterminado de Roblox
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Función personalizada y tiempo delta
El último argumento ( function ) es la función personalizada para llamar.Esta función se pasará un parámetro llamado deltaTime que muestra cuánto tiempo pasó entre el comienzo del paso de renderizado anterior y el comienzo del paso de renderizado actual.
Todas las actualizaciones de renderizado esperarán hasta que el código en el paso de renderizado termine.Asegúrate de que cualquier código llamado por BindToRenderStep() se ejecute rápida y eficientemente; si el código tarda demasiado, los visuales de la experiencia serán choppy.
Parámetros
Etiqueta para el enlace que se puede utilizar con Unbind si el enlace ya no es necesario.
Prioridad del enlace como entero; determina cuándo durante el paso de renderizado llamar la función personalizada.Cuanto menor sea este número, más pronto se llamará la función personalizada.Si dos atajos tienen la misma prioridad, el motor de Roblox elegirá aleatoriamente uno para ejecutarse primero.
La función personalizada que se está vinculando.
Devuelve
Muestras de código
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
Si el código que invocó este método se está ejecutando en un contexto de cliente (en un LocalScript , en un ModuleScript requerido por un LocalScript , o en un Script con RunContext establecido a Enum.RunContext.Client ), este método devolverá true .En todos los demás casos, este método devolverá false .
Si este método devuelve true , el entorno actual puede acceder a funciones solo para clientes como RunService.PreRender o Players.LocalPlayer .
Devuelve
Si el entorno actual está ejecutando el cliente.
IsEdit
Este método devuelve si el entorno actual está en modo "editar", por ejemplo, en Studio cuando la experiencia no se está ejecutando.
IsEdit() devolverá lo contrario de IsRunning(), excepto cuando la simulación se haya pausado, en cuyo caso ambos métodos devolverán false .
Devuelve
Si el entorno actual está en modo "editar".
IsRunMode
Este método devuelve si el botón Ejecutar se ha presionado para ejecutar la simulación en Studio.Seguirá devolviendo true si la simulación se ha pausado usando el botón Pausar ; sin embargo, una vez que se haya detenido usando el botón Detener , volverá a devolver false .
Tenga en cuenta que Studio solo entra en modo "ejecutar" cuando se presiona el botón Ejecutar , no el botón Reproducir .Tenga en cuenta también que este método devolverá false si la simulación se inició usando RunService:Run() en lugar del botón Ejecutar .
Devuelve
Si el botón Ejecutar se ha presionado para ejecutar la simulación en Studio.
IsRunning
Devuelve si la experiencia se está ejecutando actualmente, lo que significa que la simulación se ha ejecutado usando los botones Ejecutar o Jugar .
IsRunning() siempre devolverá lo contrario de IsEdit() excepto cuando la simulación se haya pausado, en cuyo caso ambos métodos devolverán false .
Devuelve
Si la experiencia se está ejecutando actualmente.
IsServer
Este método devuelve si el entorno actual se está ejecutando en el servidor.Si el código que invocó este método se está ejecutando en un contexto de servidor (en un Script con RunContext establecido a Enum.RunContext.Server o Enum.RunContext.Legacy , o en un ModuleScript requerido por un Script ), este método devolverá true .En todos los demás casos, este método devolverá false .
Si esta función devuelve verdadero, entonces el entorno actual puede acceder a características solo del servidor como ServerStorage o ServerScriptService .
Devuelve
Si el entorno actual se está ejecutando en el servidor.
IsStudio
Este método devuelve si el entorno actual se está ejecutando en Studio. Se puede usar para envolver el código que solo debe ejecutarse al probar en Studio.
Devuelve
Si el entorno actual se está ejecutando en Studio.
Pause
Este método pausa la simulación de la experiencia si está en ejecución, suspendiendo la física y los scripts.La simulación se puede iniciar utilizando Run() o el botón Ejecutar en Studio; cuando la simulación se pausa, IsRunning() devolverá false .
Devuelve
Run
Este método ejecuta la simulación de la experiencia (física y scripts).Cuando la simulación esté en ejecución, IsRunning() devolverá true .Sin embargo, IsRunMode() solo devolverá true si la simulación se inició usando el botón Ejecutar en Studio.
Devuelve
Stop
Este método detiene la simulación de la experiencia si se está ejecutando.Cuando la simulación se detiene, IsRunning() devolverá false y IsEdit() devolverá true .
En contraste con el botón Detener en Studio, llamar a este método no restaurará la experiencia al estado en que se encontraba antes de que se ejecutarla simulación.Esto significa que cualquier cambio realizado a la experiencia por la simulación de físicas y scripts persistirá después de que la simulación haya terminado.
Devuelve
UnbindFromRenderStep
Dada una función de nombre enviada a BindToRenderStep() , este método desvinculará la función de ser llamada durante PreRender .Esto se usa para desvincular las funciones vinculadas una vez que ya no se necesitan o cuando ya no necesitan disparar cada paso.
Si no hay función vinculada por el nombre dado, este método no toma ninguna acción y continúa sin levantar un error.
Parámetros
El nombre de la función que se está desvinculando.
Devuelve
Eventos
Heartbeat
El evento Heartbeat se activa en cada marco, después de que la simulación de física se haya completado.El argumento deltaTime indica el tiempo que ha transcurrido desde el marco anterior.
Este evento es cuando la mayoría de los scripts se ejecutar.Ocurre al final de cada marco y también es cuando se ejecutan cualquier script de espera, como los programados con la biblioteca task. Heartbeat se usa comúnmente para tareas periódicas, como actualizar sistemas de juego principales como la regeneración de salud.
Después de este paso, el motor envía actualizaciones de propiedad y eventos al servidor o a los clientes que se reciben más tarde como parte del paso de replicación.
Parámetros
El tiempo (en segundos) que ha transcurrido desde el marco anterior.
PostSimulation
El evento PostSimulation se activa en cada marco, después de que la simulación de física se haya completado.El argumento deltaTimeSim indica el tiempo que el marco actual ha acelerado la simulación de física, sin tener en cuenta la limitación de la física.
Este evento es útil para hacer ajustes finales al resultado de la simulación. Tras esta fase, el motor activa el evento Heartbeat.
Parámetros
El tiempo (en segundos) que el marco actual ha acelerado la simulación de física, sin tener en cuenta la limitación de la física.
PreAnimation
El evento PreAnimation se activa en cada marco, antes de la simulación de físicas pero después de renderizar.El argumento deltaTimeSim indica el tiempo que el marco actual tiene animaciones de paso.
Este evento es útil para modificar objetos de animación, como ajustar su velocidad o prioridad.Una vez que el evento PreAnimation termine, el motor procede a ejecutar estas animaciones, actualizando las transformaciones conjuntas que se usarán más tarde para actualizar objetos durante la simulación de física.
Después de que las animaciones se pasen, el motor activa el evento PreSimulation.
Parámetros
El tiempo (en segundos) que el marco actual tiene animaciones de paso.
PreRender
El evento PreRender (reemplazo de RenderStepped ) se activa cada marco, antes de que se renderice el marco.El argumento deltaTimeRender indica el tiempo que ha transcurrido desde el marco anterior.
Este evento te permite ejecutar código y actualizar el mundo antes de que se dibuje en la pantalla de un jugador.Esto es útil para ajustes de última hora como cambiar las posiciones de los objetos, actualizar animaciones o preparar efectos visuales, pero debe usarse con moderación ya que el motor no puede comenzar a renderizar el marco hasta que el código que se ejecuta en este evento haya terminado de ejecutarse.
Como PreRender es del lado del cliente, solo se puede usar en un LocalScript , en un ModuleScript requerido por un LocalScript , o en un Script con RunContext establecido a Enum.RunContext.Client .
Después de la fase PreRender, la fase de simulación comienza con el evento PreAnimation.
Parámetros
El tiempo (en segundos) que ha transcurrido desde el marco anterior.
PreSimulation
El evento PreSimulation (reemplazo de Stepped ) se activa cada marco, antes de la simulación de física.El argumento deltaTimeSim indica el tiempo que el marco actual pasará la simulación de física, sin tener en cuenta la limitación de la física.
Este evento es útil para ajustar propiedades como velocidad o fuerzas justo antes de que se apliquen como parte de la simulación.Luego se ejecuta la simulación, potencialmente varias veces, ya que el solucionador de física se ejecuta con una mayor frecuencia que otros sistemas de motor.Una vez que esto esté completo, se activa el evento PostSimulation.
Parámetros
El tiempo (en segundos) que el marco actual pasará la simulación de física, sin tener en cuenta la limitación de la física.
RenderStepped
Dispara cada marco, antes de que se renderice el marco.
Nota de migración
Este evento ha sido sustituido por PreRender que debe usarse para el nuevo trabajo.
Parámetros
El tiempo (en segundos) que ha transcurrido desde el marco anterior.
Stepped
Dispara cada marco, antes de la simulación de físicas.
Nota de migración
Este evento ha sido sustituido por PreSimulation que debe usarse para el nuevo trabajo.
Parámetros
La duración (en segundos) que RunService ha estado funcionando durante.
El tiempo (en segundos) que ha transcurrido desde el marco anterior.