RunService
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
RunService contém métodos e eventos para gerenciamento de tempo, assim como para gerenciar o contexto em que uma experiência ou script está executando.Métodos como IsClient() , IsServer() e IsStudio() podem ajudá-lo a determinar em que código de contexto está executando.Esses métodos são úteis para ModuleScripts que podem ser necessários por scripts de cliente e servidor.Além disso, IsStudio() pode ser usado para adicionar comportamentos especiais para testes no Studio.
RunService também abriga eventos que permitem que seu código adira ao ciclo frame‑by‑frame do Roblox, como PreRender , PreAnimation , PreSimulation , PostSimulation e Heartbeat.Selecionar o evento correto para usar em qualquer caso é importante, então você deve ler Programador de Tarefas para tomar uma decisão informada.
Resultados de Teste de Contexto
<th><code>Serviço de Execução de Classe.Run:IsStudio()|IsStudio</code></th><th><code>Serviço de Execução de Classe:IsClient()|IsClient</code></th><th><code>Class.RunService:IsServer()|IsServer</code></th><th><code>Serviço de Execução de Classe:IsEdit()|IsEdit</code></th><th><code>Class.RunService:Está Executando()|Está Executando</code></th><th><code>Serviço de Execução de Classe: IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>Jogador ao vivo</td><td><code>falso</code> ></td><td><code>verdadeiro</code> ></td><td><code>falso</code> ></td><td /><td /><td /></tr><tr><td>Servidor ao vivo</td><td><code>falso</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td /><td /><td /></tr><tr><td>Modo de Edição</td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>falso</code></td></tr><tr><td>Edição Colaborativa</td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>falso</code></td></tr><tr><td>Modo de Execução</td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td></tr><tr><td>Modo de Jogo (Cliente)</td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td></tr><tr><td>Modo de Jogo (Servidor)</td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td></tr><tr><td>Teste em Equipe (Jogador)</td><td><code>verdadeiro</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td></tr><tr><td>Teste em Equipe (Servidor)</td><td><code>falso</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td><td><code>verdadeiro</code></td><td><code>falso</code></td></tr></tbody>
Meio Ambiente |
---|
Resumo
Propriedades
Métodos
Dada uma string de nome de uma função e uma prioridade, este método vincula a função a RunService.PreRender.
Retorna se o ambiente atual está rodando no cliente.
Retorna se o ambiente atual está no modo Edit 2.
Retorna se o botão Correr foi pressionado para executar a simulação no Studio.
Retorna se a experiência está atualmente em execução.
Retorna se o ambiente atual está rodando no servidor.
Retorna se o ambiente atual está rodando no Studio.
Pausa a simulação da experiência se ela estiver em andamento, suspendendo a física e os scripts.
Executa a simulação do jogo, executando física e scripts.
Para a simulação da experiência se ela estiver rodando.
Desliga uma função que foi vinculada ao ciclo de renderização usando RunService:BindToRenderStep() .
Eventos
Dispara a cada quadro, após a simulação de física ter concluído.
Dispara a cada quadro, após a simulação de física ter concluído.
Incendeia cada quadro, antes da simulação de física, mas depois de renderizar.
Dispara a cada quadro, antes que o quadro seja renderizado.
Dispara todos os quadros, antes da simulação de física.
Dispara a cada quadro, antes que o quadro seja renderizado.
Dispara todos os quadros, antes da simulação de física.
Propriedades
ClientGitHash
RunState
Métodos
BindToRenderStep
A função BindToRenderStep() vincula uma função personalizada a ser chamada em um momento específico durante o passo de renderização.Existem três argumentos principais: name , priority e o que function chamar.
Como está ligado ao processo de renderização do cliente, BindToRenderStep() só pode ser chamado no cliente.
Qual o nome
O parâmetro name é uma etiqueta para o vinculo e pode ser usado com RunService:UnbindFromRenderStep() se o vinculo não for mais necessário.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Vincule a função acima ao vinculo chamado "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Desvincule a função vinculada a "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Prioridade
O priority da vinculação é um integral; determina quando durante o passo de renderização chamar a função personalizada.Quanto menor esse número, mais cedo a função personalizada será chamada.Se duas vinculações tiverem a mesma prioridade, o Motor do Roblox escolherá aleatoriamente uma para executar primeiro.Os scripts de controle padrão do Roblox são executados com essas prioridades específicas:
- Entrada do Jogador: 100
- Controles de câmera: 200 Para conveniência; o Enum.RenderPriority enum pode ser usado para determinar o valor inteiro para definir um vinculo.Por exemplo, para fazer um direito de vinculação antes da atualização padrão da câmera, simplesmente subtraia 1 do nível de prioridade da câmera.
Ao usar Enum.RenderPriority, lembre-se de usar .Value no final do enum desejado. RunService:BindToRenderStep() não funcionará se apenas o enum for usado por conta possuir.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Código aqui será executado antes do script de câmera padrão do Roblox
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Função personalizada e tempo Delta
O último argumento ( function ) é a função personalizada para chamar.Essa função será passada um parâmetro chamado deltaTime que mostra quanto tempo passou entre o início do passo de renderização anterior e o início do passo de renderização atual.
Todas as atualizações de renderização esperarão até que o código no passo de renderização termine.Certifique-se de que qualquer código chamado por BindToRenderStep() execute rapidamente e eficientemente; se o código demorar muito, os visuais da experiência serão desajeitados.
Parâmetros
Rótulo para o vinculo que pode ser usado com Unbind se o vinculo não for mais necessário.
Prioridade da vinculação como um integral; determina quando durante o passo de renderização chamar a função personalizada.Quanto menor esse número, mais cedo a função personalizada será chamada.Se duas bindings tiverem a mesma prioridade, o Motor do Roblox escolherá aleatoriamente uma para executar primeiro.
A função personalizada sendo vinculada.
Devolução
Amostras 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
Se o código que invocou este método estiver sendo executado em um contexto de cliente (em um LocalScript , em um ModuleScript necessário por um LocalScript , ou em um Script com RunContext definido para Enum.RunContext.Client ), este método retornará true .Em todos os outros casos, este método retornará false .
Se este método retornar true, o ambiente atual pode acessar recursos exclusivos do cliente, como RunService.PreRender ou Players.LocalPlayer.
Devolução
Se o ambiente atual está rodando o cliente.
IsEdit
Este método retorna se o ambiente atual está no modo "editar", por exemplo, no Studio quando a experiência não está em execução.
IsEdit() retornará o inverso de IsRunning(), exceto quando a simulação foi pausada, no qual ambos os métodos retornarão false .
Devolução
Se o ambiente atual está no modo "editar".
IsRunMode
Este método retorna se o botão Correr foi pressionado para executar a simulação no Studio.Ele continuará a retornar true se a simulação foi pausada usando o botão Pause ; no entanto, uma vez que foi interrompida usando o botão Parar , ela voltará a retornar false .
Observe que o Studio entra apenas no modo "executar" quando o botão Correr é pressionado, não o botão Jogar .Observe também que este método retornará false se a simulação foi iniciada usando RunService:Run() em vez do botão Executar .
Devolução
Se o botão Correr foi pressionado para executar a simulação no Studio.
IsRunning
Retorna se a experiência está atualmente em execução, o que significa que a simulação foi executada usando os botões Executar ou Jogar .
IsRunning() sempre retornará o inverso de IsEdit() exceto quando a simulação foi pausada, no qual ambos os métodos retornarão false .
Devolução
Se a experiência está atualmente em execução.
IsServer
Este método retorna se o ambiente atual está rodando no servidor.Se o código que invocou este método estiver sendo executado em um contexto de servidor (em um Script com RunContext definido para Enum.RunContext.Server ou Enum.RunContext.Legacy , ou em um ModuleScript exigido por um Script ), este método retornará true .Em todos os outros casos, este método retornará false .
Se essa função retornar verdadeiro, então o ambiente atual pode acessar recursos exclusivos do servidor como ServerStorage ou ServerScriptService.
Devolução
Se o ambiente atual está rodando no servidor.
IsStudio
Este método retorna se o ambiente atual está rodando no Studio. Ele pode ser usado para embalar código que deve ser executado apenas ao testar no Studio.
Devolução
Se o ambiente atual está rodando no Studio.
Pause
Este método põe em pausa a simulação da experiência se ela estiver em andamento, suspendendo a física e os scripts.A simulação pode ser iniciada usando Run() ou o botão Executar no Studio; quando a simulação é pausada, IsRunning() retornará false .
Devolução
Run
Este método executa a simulação da experiência (física e scripts).Quando a simulação estiver em execução, IsRunning() retornará true .No entanto, IsRunMode() retornará apenas true se a simulação foi iniciada usando o botão Executar no Studio.
Devolução
Stop
Este método interrompe a simulação da experiência se ela estiver em andamento.Quando a simulação é interrompida, IsRunning() retornará false e IsEdit() retornará true .
Em contraste com o botão Pare no Studio, chamar este método não restaurará a experiência ao estado em que estava antes da simulação ser executar.Isso significa que quaisquer alterações feitas à experiência pela simulação de física e scripts persistirão depois que a simulação terminar.
Devolução
UnbindFromRenderStep
Dado um nome de uma função enviada para BindToRenderStep(), este método desvinculará a função de ser chamada durante PreRender .Isso é usado para desvincular funções ligadas quando elas não forem mais necessárias ou quando não precisam mais disparar todos os passos.
Se não houver função vinculada pelo nome dado, este método não toma nenhuma ação e continua sem causar um erro.
Parâmetros
O nome da função sendo desvinculada.
Devolução
Eventos
Heartbeat
O evento Heartbeat ocorre a cada quadro, após a simulação de física ter concluído.O argumento deltaTime indica o tempo que decorreu desde o quadro anterior.
Este evento é quando a maioria dos scripts executarexecutada.Ocorre no final de cada quadro e também é quando quaisquer scripts de espera são executados, como os agendados com a biblioteca task.Heartbeat é comumente usado para tarefas periódicas, como atualizar sistemas principais de jogos como regeneração de saúde.
Após este passo, o motor envia atualizações de propriedade e eventos ao servidor ou aos clientes que são recebidos mais tarde como parte do passo de recepção de replicação .
Parâmetros
O tempo (em segundos) que decorreu desde o quadro anterior.
PostSimulation
O evento PostSimulation ocorre a cada quadro, após a simulação de física ter concluído.O argumento deltaTimeSim indica o tempo que o quadro atual passou a simulação de física, sem levar em conta o atraso de física.
Este evento é útil para fazer ajustes finais no resultado da simulação. Após esta fase, o motor ativa o evento Heartbeat.
Parâmetros
O tempo (em segundos) que o quadro atual passou a simulação de física, sem levar em conta o atraso de física.
PreAnimation
O evento PreAnimation ocorre a cada quadro, antes da simulação de física, mas após o renderizamento.O argumento deltaTimeSim indica o tempo que o quadro atual tem passado animações.
Este evento é útil para modificar objetos de animação, como ajustar sua velocidade ou prioridade.Uma vez que o evento PreAnimation completado, o motor procede a executar essas animações, atualizando as transformações conjuntas que serão usadas mais tarde para atualizar objetos durante a simulação de física.
Depois que as animações forem concluídas, o motor ativa o evento PreSimulation.
Parâmetros
O tempo (em segundos) que a animação de quadro atual passou.
PreRender
O evento PreRender ( substituição para RenderStepped ) dispara a cada quadro, antes que o quadro seja renderizado.O argumento deltaTimeRender indica o tempo que decorreu desde o quadro anterior.
Este evento permite que você execute código e atualize o mundo antes que ele seja desenhado na tela de um jogador.Isso é útil para ajustes de última hora, como mudar as posições dos objetos, atualizar animações ou preparar efeitos visuais, mas deve ser usado com moderação, pois o motor não pode começar a renderizar o quadro até que o código em execução neste evento tenha terminado de executar.
Como PreRender é do lado do cliente, só pode ser usado em um LocalScript , em um ModuleScript exigido por um LocalScript ou em um Script com RunContext definido para Enum.RunContext.Client.
Após a fase PreRender seguinte, a fase de simulação começa com o evento PreAnimation.
Parâmetros
O tempo (em segundos) que decorreu desde o quadro anterior.
PreSimulation
O evento PreSimulation ( substituição para Stepped ) dispara a cada quadro, antes da simulação de física.O argumento deltaTimeSim indica o tempo em que o quadro atual irá executar a simulação de física, sem levar em conta o atraso de física.
Este evento é útil para ajustar propriedades como velocidade ou forças logo antes de serem aplicadas como parte da simulação.A simulação então é executada, potencialmente várias vezes, pois o solucionador de física é executado com uma frequência maior do que outros sistemas de motor.Uma vez que isso é concluído, o evento PostSimulation é disparado.
Parâmetros
O tempo (em segundos) que o quadro atual dará continuidade à simulação de física, sem levar em conta o atraso de física.
RenderStepped
Dispara a cada quadro, antes que o quadro seja renderizado.
Nota de migração
Este evento foi substituído por PreRender que deve ser usado para novo trabalho.
Parâmetros
O tempo (em segundos) que decorreu desde o quadro anterior.
Stepped
Dispara todos os quadros, antes da simulação de física.
Nota de migração
Este evento foi substituído por PreSimulation que deve ser usado para novo trabalho.
Parâmetros
A duração (em segundos) que RunService tem sido executada por.
O tempo (em segundos) que decorreu desde o quadro anterior.