RunService
*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.
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
Dane nazwa ciągu funkcji i priorytet, ta metoda wiąże funkcję z RunService.PreRender.
Zwraca, czy obecne środowisko jest uruchomione na klientzie.
Zwraca, czy obecne środowisko jest w trybie Edit .
Zwraca, czy przycisk Uruchom został naciśnięty, aby uruchomić symulację w Studio.
Zwraca, czy doświadczenie jest obecnie uruchomione.
Zwraca, czy obecne środowisko jest uruchomione na serwerze.
Zwraca, czy obecne środowisko jest uruchomione w Studio.
Zatrzymuje symulację doświadczenia, jeśli jest uruchomiona, zawieszając fizykę i skrypty.
Wykonuje symulację gra, wykonując fizykę i skrypty.
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
Wypala każdą ramę po zakończeniu symulacji fizycznej.
Wypala każdą ramę po zakończeniu symulacji fizycznej.
Ogień każdą ramę, przed symulacją fizyczną, ale po renderowaniu.
Ogień każdą ramę, zanim ramę zostanie wyrenderowana.
Wypala każdą ramę, przed symulacją fizyczną.
Ogień każdą ramę, zanim ramę zostanie wyrenderowana.
Wypala każdą ramę, przed symulacją fizyczną.
Właściwości
ClientGitHash
RunState
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
Etykieta dla wiązania, której można używać z Unbind jeśli wiązanie nie jest już potrzebne.
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ć.
Funkcja niestandardowa jest wiązana.
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.
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
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
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
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
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
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
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
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
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
Nazwa funkcji, która jest rozwiązywana.
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
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
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
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
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
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
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
Czas trwania (w sekundach), przez który RunService biegnie.
Czas (w sekundach) upływający od poprzedniego ramu.