RunService

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa
Bez replikacji

RunService zawiera metody i zdarzenia zarządzania czasem, a także zarządzania kontekstem, w którym działa doświadczenie lub skrypt.Metody takie jak IsClient() , IsServer() i IsStudio() mogą pomóc ci określić, w jakim kontekście uruchamiany jest kod.Te metody są przydatne dla ModuleScripts które mogą być wymagane przez skrypty klienta i serwera.Ponadto IsStudio() można użyć do dodania specjalnych zachowań do testów w Studio.

RunService również domaga się wydarzeń, które pozwalają na przestrzeganie przez twój kod pętli ram na ram przez Roblox, takich jak PreRender , PreAnimation , PreSimulation , PostSimulation i Heartbeat.Wybór odpowiedniego wydarzenia do użycia w dowolnym przypadku jest ważny, więc powinieneś przeczytać Planownik zadań, aby podjąć świadomą decyzję.

Wyniki testów kontekstu

<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:IsRunning()|IsRunning</code></th>
<th><code>Class.RunService:IsRunMode()|IsRunMode</code></th>
</tr>
</thead>
<tbody>
<tr>
<td>Żywy gracz</td><td><code>fałsz</code></td><td><code>prawda</code></td><td><code>fałsz</code></td>
<td />
<td />
<td />
</tr>
<tr>
<td>Żywy serwer</td><td><code>fałsz</code></td><td><code>fałsz</code></td><td><code>prawda</code></td>
<td />
<td />
<td />
</tr>
<tr>
<td>Tryb edycji</td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>fałsz</code></td>
</tr>
<tr>
<td>Współpraca edytowania</td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>fałsz</code></td>
</tr>
<tr>
<td>Tryb wykonania</td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
</tr>
<tr>
<td>Tryb odtwarzania (klient)</td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
</tr>
<tr>
<td>Tryb odtwarzania (serwer)</td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
</tr>
<tr>
<td>Test zespołu (gracz)</td>
<td><code>prawda</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
</tr>
<tr>
<td>Test zespołu (serwer)</td>
<td><code>fałsz</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
<td><code>prawda</code></td>
<td><code>fałsz</code></td>
</tr>
</tbody>
Środowisko

Podsumowanie

Właściwości

Metody

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

    Dane nazwa ciągu funkcji i priorytet, ta metoda wiąże funkcję z RunService.PreRender.

  • Zapis równoległy

    Zwraca, czy obecne środowisko jest uruchomione na klientzie.

  • Zabezpieczenia dodatku plug-in
    Zapis równoległy

    Zwraca, czy obecne środowisko jest w trybie Edit .

  • Zapis równoległy

    Zwraca, czy przycisk Uruchom został naciśnięty, aby uruchomić symulację w Studio.

  • Zwraca, czy doświadczenie jest obecnie uruchomione.

  • Zapis równoległy

    Zwraca, czy obecne środowisko jest uruchomione na serwerze.

  • Zapis równoległy

    Zwraca, czy obecne środowisko jest uruchomione w Studio.

  • Pause():()
    Zabezpieczenia dodatku plug-in

    Zatrzymuje symulację doświadczenia, jeśli jest uruchomiona, zawieszając fizykę i skrypty.

  • Run():()
    Zabezpieczenia dodatku plug-in

    Wykonuje symulację gra, wykonując fizykę i skrypty.

  • Stop():()
    Zabezpieczenia dodatku plug-in

    Zatrzymuje symulację doświadczenia, jeśli jest uruchomiona.

  • Rozwiązuje funkcję, która była przypisana do pętla renderowania za pomocą RunService:BindToRenderStep().

Zdarzenia

Właściwości

ClientGitHash

Tylko do odczytu
Bez replikacji
Zabezpieczenia skryptów Roblox
Odczyt równoległy
Bez replikacji
Zabezpieczenia dodatku plug-in
Odczyt równoległy

Metody

BindToRenderStep

()

Funkcja BindToRenderStep() wiąże niestandardową funkcję, która ma być wezwana w określonym czasie podczas etapu renderowania.Istnieją trzy główne argumenty: name, priority i co function wezwać.

Ponieważ jest powiązany z procesem renderowania klienta, BindToRenderStep() można wezwać tylko na klientzie.

Nazwa

Parametr name jest etykietą dla wiązania i może być używany z RunService:UnbindFromRenderStep() jeśli wiązanie nie jest już potrzebne.


local RunService = game:GetService("RunService")
local function functionToBind() end
-- Zwiąż funkcję powyżej z przypisem o nazwie "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Odłącz funkcję przypisaną do "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Prioritas

Przywiązanie priority jest liczbą całkowitą; określa, kiedy podczas kroku renderowania należy wezwać niestandardową funkcję.Im niższa jest ta liczba, tym szybciej wezwana zostanie niestandardowa funkcja.Jeśli dwa wiązania mają ten sam priorytet, silnik Roblox wybierze losowo jedno, aby najpierw uruchomić.Domyślne skrypty kontroli Roblox uruchamiane są z tymi konkretnymi priorytetami:

  • Wejście gracza: 100
  • Sterowanie kamerą: 200 Ze względu na wygodę; enumeracja Enum.RenderPriority może być używana do określenia wartości całkowitej, aby ustawić wiązanie.Na przykład, aby wykonać wiążące prawo przed aktualizacjadomyślnej kamery, po prostu odłącz 1 od poziomu priorytetu kamery.

Podczas używania Enum.RenderPriority pamiętaj o użyciu .Value na końcu wymaganego enum. RunService:BindToRenderStep() nie będzie działać, jeśli tylko użyje się enum na posiadaćrękę.


local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Kod tutaj zostanie uruchomiony przed domyślnym skryptem kamery Roblox
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Niestandardowa funkcja i czas Delta

Ostatni argument ( function ) to niestandardowa funkcja do wezwania.Funkcja ta zostanie przekazana jeden parametr o nazwie deltaTime, który pokazuje, ile czasu upłynęło między początkiem poprzedniego kroku renderowania a początkiem obecnego kroku renderowania.

Wszystkie aktualizacje renderowania będą czekać, aż kod w kroku renderowania zakończy się.Upewnij się, że każdy kod wywołany przez BindToRenderStep() uruchamia się szybko i wydajnie; jeśli kod będzie zbyt długi, wizualizacje doświadczenia będą niedokładne.

Parametry

name: string

Etykieta dla wiązania, której można używać z Unbind jeśli wiązanie nie jest już potrzebne.

Wartość domyślna: ""
priority: number

Priorytet wiązania jako liczby całkowitej; określa, kiedy podczas kroku renderowania należy wezwać niestandardową funkcję.Im niższa jest ta liczba, tym szybciej wezwana zostanie niestandardowa funkcja.Jeśli dwa wiązania mają ten sam priorytet, silnik Roblox wybierze losowo jedno, aby najpierw uruchomić.

Wartość domyślna: ""
function: function

Funkcja niestandardowa jest wiązana.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

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

Zapis równoległy

Jeśli kod, który uruchomił tę metodę, jest uruchamiany w kontekście klienta (w LocalScript , w ModuleScript wymaganym przez LocalScript lub w Script z ustawieniem RunContext na Enum.RunContext.Client ), ta metoda zwróci true .W każdym innym przypadku ta metoda zwróci false .

Jeśli ta metoda zwraca true, obecne środowisko może uzyskać dostęp do funkcji tylko dla klienta, takich jak RunService.PreRender lub Players.LocalPlayer.


Zwroty

Czy obecne środowisko uruchamia klienta.

IsEdit

Zabezpieczenia dodatku plug-in
Zapis równoległy

Ta metoda zwraca, czy obecne środowisko jest w trybie "edytowania", na przykład w Studio, gdy doświadczenie nie jest uruchomione.

IsEdit() zwróci odwrotność IsRunning(), z wyjątkiem, gdy symulacja została wstrzymana, w takim przypadku oba metody zwrócą false .


Zwroty

Czy obecne środowisko jest w trybie "edytowania".

IsRunMode

Zapis równoległy

Ta metoda zwraca, czy przycisk Uruchom został naciśnięty, aby uruchomić symulację w Studio.Będzie nadal zwracać true, jeśli symulacja została wstrzymana za pomocą przycisku Pause , jednak po tym, jak została zatrzymana za pomocą przycisku Stop , powróci do zwrotu false.

Zauważ, że Studio wchodzi tylko w tryb "biegu", gdy naciśnięty zostanie przycisk Uruchom , a nie przycisk Graj .Zauważ też, że ta metoda zwróci false, jeśli symulacja została uruchomiona za pomocą RunService:Run() zamiast przycisku Uruchom .


Zwroty

Czy przycisk Uruchom został naciśnięty, aby uruchomić symulację w Studio.

IsRunning

Zwraca, czy doświadczenie jest obecnie uruchomione, co oznacza, że symulacja została uruchomiona za pomocą przycisków Uruchom lub Graj .

IsRunning() zawsze zwróci odwrotność IsEdit() , z wyjątkiem, gdy symulacja została wstrzymana, w takim przypadku obie metody zwrócą false .


Zwroty

Czy doświadczenie jest obecnie uruchomione.

IsServer

Zapis równoległy

Metoda ta zwraca, czy obecne środowisko jest uruchomione na serwerze.Jeśli kod, który uruchomił tę metodę, jest uruchamiany w kontekście serwera (w Script z RunContext ustawionym na Enum.RunContext.Server lub Enum.RunContext.Legacy lub w ModuleScript wymaganym przez Script ), ta metoda zwróci true .W każdym innym przypadku ta metoda zwróci false .

Jeśli ta funkcja zwraca prawdę, to obecne środowisko może uzyskać dostęp do funkcji tylko serwerowych, takich jak ServerStorage lub ServerScriptService.


Zwroty

Czy obecne środowisko jest uruchomione na serwerze.

IsStudio

Zapis równoległy

Ta metoda zwraca, czy obecne środowisko jest uruchamiane w Studio. Można go używać do owijania kodu, który powinien być uruchamiany tylko podczas testowania w Studio.


Zwroty

Czy obecne środowisko jest uruchamiane w Studio.

Pause

()
Zabezpieczenia dodatku plug-in

Ta metoda wstrzymuje symulację doświadczenia, jeśli jest uruchomiona, zawieszając fizykę i skrypty.Symulacja może zostać uruchomiona za pomocą Run() lub przycisku Uruchom w Studio; gdy symulacja zostanie wstrzymana, IsRunning() zwróci false .


Zwroty

()

Run

()
Zabezpieczenia dodatku plug-in

Ta metoda wykonuje symulację doświadczenia (fizykę i skrypty).Gdy symulacja jest uruchomiona, IsRunning() zwróci true .Jednakże IsRunMode() zwróci tylko true, jeśli symulacja została uruchomiona za pomocą przycisku Uruchom w Studio.


Zwroty

()

Stop

()
Zabezpieczenia dodatku plug-in

Ta metoda zatrzymuje symulację doświadczenia, jeśli jest uruchomiona.Gdy symulacja zostanie zatrzymana, IsRunning() zwróci false i IsEdit() zwróci true .

W przeciwieństwie do przycisku Zatrzymaj w Studio wezwanie tej metody nie przywróci doświadczenia do stanu, w którym znajdowało się przed uruchomieniem symulacji.Oznacza to, że wszelkie zmiany wprowadzone do doświadczenia przez symulację fizyczną i skrypty utrzymają się po zakończeniu symulacji.


Zwroty

()

UnbindFromRenderStep

()

Biorąc pod uwagę nazwę funkcji wysłanej do BindToRenderStep(), ta metoda rozwiąże funkcję z bycia wywołaną podczas PreRender .Służy to do odłączenia wiązanych funkcji, gdy nie są już potrzebne lub gdy nie muszą już wystrzeliwać każdego kroku.

Jeśli nie ma przypisanej funkcji przez podane nazwisko, ta metoda nie podejmuje żadnych działań i kontynuuje bez podnoszenia błędu.

Parametry

name: string

Nazwa funkcji, która jest rozwiązywana.

Wartość domyślna: ""

Zwroty

()

Zdarzenia

Heartbeat

Wydarzenie Heartbeat uruchamia się po zakończeniu symulacji fizycznej.Argument deltaTime wskazuje czas, który upłynął od poprzedniego ramu.

To wydarzenie występuje, gdy większość skryptów jest uruchamiana.Zachodzi on na końcu każdej ramy i jest to również wtedy, gdy wykonywane są jakiekolwiek oczekujące skrypty, takie jak te zaplanowane z biblioteką task.Heartbeat jest powszechnie używany do okresowych zadań, takich jak aktualizowanie podstawowych systemów gry, takich jak regeneracja zdrowia.

Po wykonaniu tego kroku silnik wysyła aktualizacje właściwości i zdarzenia na serwer lub klientów, które później otrzymuje jako część kroku replikacji.

Parametry

deltaTime: number

Czas (w sekundach) upływający od poprzedniego ramu.


PostSimulation

Wydarzenie PostSimulation uruchamia się po zakończeniu symulacji fizycznej.Argumen deltaTimeSim wskazuje czas, w którym obecny ram przełączył symulację fizyczną, bez uwzględniania ograniczania fizyki.

To wydarzenie jest przydatne do dokonania ostatecznych korekt wyniku symulacji. Po tej fazie silnik uruchamia wydarzenie Heartbeat.

Parametry

deltaTimeSim: number

Czas (w sekundach), w którym obecny ram przełączył symulację fizyczną, bez uwzględniania ograniczania fizyki.


PreAnimation

Wydarzenie PreAnimation uruchamia się przed symulacją fizyczną, ale po renderowaniu.Argument deltaTimeSim wskazuje czas, kiedy obecna rama ma animacje kroków.

To wydarzenie jest przydatne do modyfikowania obiektów animacji, takich jak dostosowywanie ich prędkości lub priorytetu.Gdy wydarzenie PreAnimation zostanie zakończone, silnik przechodzi do uruchamiania tych animacji, aktualizując wspólne transformacje, które zostaną później wykorzystane do aktualizowania obiektów podczas symulacji fizycznej.

Po zakończeniu animacji silnik uruchamia wydarzenie PreSimulation.

Parametry

deltaTimeSim: number

Czas (w sekundach), kiedy obecna rama ma animacje kroków.


PreRender

Wydarzenie PreRender (zastąpienie dla RenderStepped) uruchamia każdą ramę, zanim ramka zostanie wyrenderowana.Argument deltaTimeRender wskazuje czas, który upłynął od poprzedniego ramu.

To wydarzenie pozwala uruchomić kod i zaktualizować świat, zanim zostanie on narysowany na ekranie gracza.Jest to przydatne do ostatniej chwili dostosowań, takich jak zmiana pozycji obiektów, aktualizowanie animacji lub przygotowywanie efektów wizualnych, ale powinno być używane oszczędnie, ponieważ silnik nie może rozpocząć renderowania ramy, dopóki kod uruchamiany w tym wydarzeniu nie zakończy wykonywania.

Ponieważ PreRender jest stroną klienta, może być używany tylko w LocalScript , w ModuleScript wymaganym przez LocalScript lub w Script z RunContext ustawionym na Enum.RunContext.Client.

Po fazie PreRender zaczyna się fazę symulacji z wydarzeniem PreAnimation.

Parametry

deltaTimeRender: number

Czas (w sekundach) upływający od poprzedniego ramu.


PreSimulation

Wydarzenie PreSimulation (zastąpienie dla Stepped ) uruchamia każdą ramę, przed symulacją fizycznąArgument deltaTimeSim wskazuje czas, w którym obecny ram będzie wykonywał symulację fizyczną, bez uwzględniania ograniczania fizyki.

To wydarzenie jest przydatne do dostosowywania właściwości takich jak prędkość lub siły tuż przed zastosowaniem ich jako część symulacji.Symulacja jest następnie uruchamiana, potencjalnie wiele razy, ponieważ rozwiązanie fizyczne uruchamia się z częstotliwością wyższą niż inne systemy silników.Gdy to się skończy, uruchamiane jest wydarzenie PostSimulation.

Parametry

deltaTimeSim: number

Czas (w sekundach), w którym obecny ram będzie wykonywał symulację fizyczną, bez uwzględniania ograniczania fizyki.


RenderStepped

Ogień każdą ramę, zanim ramę zostanie wyrenderowana.

Notatka o migracji

To wydarzenie zostało zastąpione przez PreRender, które powinno być używane do nowej pracy.

Parametry

deltaTime: number

Czas (w sekundach) upływający od poprzedniego ramu.


Stepped

Wypala każdą ramę, przed symulacją fizyczną.

Notatka o migracji

To wydarzenie zostało zastąpione przez PreSimulation, które powinno być używane do nowej pracy.

Parametry

time: number

Czas trwania (w sekundach), przez który RunService biegnie.

deltaTime: number

Czas (w sekundach) upływający od poprzedniego ramu.