RunService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
RunService süre yönetimi ve bir deneyimin veya senaryonun çalıştığı konteyner yönetimi için yöntemler ve olaylar da içerir.IsClient() , IsServer() ve IsStudio() gibi yöntemler, hangi senaryo kodunun çalıştığını belirlemenize yardımcı olabilir.Bu yöntemler, hem istemci hem de sunucu kodları tarafından gerekli olabilecek ModuleScripts için yararlıdır.Ayrıca, IsStudio() İçeri-Studio testi için özel davranışlar eklemek için kullanılabilir.
RunService ayrıca kodun Roblox'un çerçeve‑by‑çerçeve döngüsüne uymasına izin veren olayları da evler, örneğin PreRender , PreAnimation , PreSimulation , PostSimulation ve Heartbeat .Herhangi bir durum için kullanılacak doğru olayı seçmek önemlidir, bu yüzden bilinçli bir karar vermek için Görev Planlayıcısı okumalısınız.
Kontekst Test Sonuçları
<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>Sınıf.RunService:IsEdit()|IsEdit</code></th><th><code>Class.RunService:IsRunning()|IsRunning|Yürütülüyor</code></th><th><code>Sınıf.RunService:IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>Canlı Oyuncu</td><td><code>false</code> ></td><td><code>true</code> ></td><td><code>false</code> ></td><td /><td /><td /></tr><tr><td>Canlı Sunucu</td><td><code>yok</code></td><td><code>yok</code></td><td><code>doğru</code></td><td /><td /><td /></tr><tr><td>Düzenleme Modu</td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>sahte</code></td></tr><tr><td>İşbirliği Düzenleme</td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>sahte</code></td></tr><tr><td>Koşma Modu</td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>doğru</code></td></tr><tr><td>Oyun Modu (Müşteri)</td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td></tr><tr><td>Oyun Modu (Sunucu)</td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>doğru</code></td></tr><tr><td>Takım Testi (Oyuncu)</td><td><code>doğru</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td></tr><tr><td>Takım Testi (Sunucu)</td><td><code>sahte</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td><td><code>doğru</code></td><td><code>sahte</code></td></tr></tbody>
Çevre |
---|
Özet
Özellikler
Yöntemler
Bir işlevin isim ve önceliği verildiğinde, bu yöntem işlevi RunService.PreRender 'ye bağlar.
Mevcut çevrenin istemci üzerinde çalışıp çalışmadığını döndürür.
Mevcut çevrenin Edit modunda olup olmadığını döndürür.
Studio'da simülasyonu çalıştırmak için Çalıştır düğmesine basılıp basılmadığını döndürür.
Deneyimin şu anda çalışıp çalışmadığını döndürür.
Mevcut çevrenin sunucuda çalışıp çalışmadığını iade eder.
Mevcut çevrenin Studio'da çalışıp çalışmadığını döndürür.
Deneyimin simülasyonunu durdurur, fiziği ve senaryoları askıya alır, eğer çalışıyorsa.
oyunsimülasyonunu yürütür, fiziği ve senaryoları yürütür.
Deneyimin simülasyonunu durdurur, eğer çalışıyorsa.
Render döngüsüne bağlanmış bir işlevi RunService:BindToRenderStep() kullanarak bağlantıdan kaldırır.
Etkinlikler
Fizik simülasyonu tamamlandıktan sonra her kareyi ateş eder.
Fizik simülasyonu tamamlandıktan sonra her kareyi ateş eder.
Fiziği simülasyonundan önce her kareyi ateş eder, ancak renderdan sonra.
Her çerçeği, çerçeğin görüntülenmeden önce ateş eder.
Fiziği simülasyonundan önce her kareyi ateş eder.
Her çerçeği, çerçeğin görüntülenmeden önce ateş eder.
Fiziği simülasyonundan önce her kareyi ateş eder.
Özellikler
ClientGitHash
RunState
Yöntemler
BindToRenderStep
The BindToRenderStep() işlevi, render adımı sırasında belirli bir zamanda çağrılacak özel bir işlev bağlar.Üç ana argüman var: name , priority ve neyi çağırmak gerekiyor function .
Müşterinin renderleme sürecine bağlı olduğundan, BindToRenderStep() yalnızca müşteride çağrılabilir.
Adı
name parametri, bağlantı için bir etikettir ve bağlantı artık gerekmediğinde RunService:UnbindFromRenderStep() ile kullanılabilir.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Yukarıdaki işlevi "tempBinding" adlı bağlantıya bağlayın
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- "tempBinding"ye bağlı işlevin bağlantısını kesin
RunService:UnbindFromRenderStep("tempBinding")
Öncelik
Bağlantının priority kısmı bir tamsayıdır; render adımı sırasında özel işlevi çağırma zamanını belirler.Bu sayı daha düşük olursa, özel işlev daha erken çağrılacaktır.Eğer iki bağlantı aynı önceliğe sahipse, Roblox Motoru rastgele ilk çalışacak birini seçecektir.Varsayılan Roblox kontrol senaryoları bu özel önceliklerle çalışır:
- Oyuncu Girişi: 100
- Kamera Kontrolleri: 200 Uygunluk için; Enum.RenderPriority sayısal değeri belirlemek için bağlantı ayarlamak için kullanılabilen enum kullanılabilir.Örneğin, varsayılan kamera güncellemesinden önce bağlantı hakkı yapmak için, kameranın öncelik seviyesinden basitçe 1 çıkarın.
Enum.RenderPriority kullanırken, arzu edilen enuma sonunda .Value kullanmayı unutmayın. RunService:BindToRenderStep() sadece enuma sahip olbaşına kullanılırsa çalışmayacaktır.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Buradaki kod, varsayılan Roblox kamera senaryosundan önce çalışacaktır
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Özel Fonksiyon ve Delta Süresi
Son argüman ( function ) çağrılacak özel işlevdir.Bu işlev, önceki render adımının başlangıcından ve mevcut render adımının başlangıcından ne kadar süre geçtiğini gösteren bir deltaTime parametre geçecektir.
Tüm render güncellemeleri, render adımındaki kod bitene kadar bekleyecektir.Herhangi bir BindToRenderStep() tarafından çağrılan kodun hızlı ve verimli bir şekilde çalıştığından emin olun; eğer kod çok uzun sürerse, deneyim görüntüleri kaba olacaktır.
Parametreler
Bağlantı yapılabilen etiket, bağlantı artık gerekmiyorsa Unbind ile kullanılabilir.
Bağlantının bir bütün olarak önceliği; render adımı sırasında özel işlevi çağırmak için ne zaman olduğunu belirler.Bu sayı daha düşük olursa, özel işlev daha erken çağrılacaktır.Eğer iki bağlantı aynı önceliğe sahipse Roblox Motoru rastgele birini ilk çalıştırmak için seçecektir.
Bağlanan özel işlev.
Dönüşler
Kod Örnekleri
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
Bu yöntemi çağıran kod bir istemci bağlamında çalışıyorsa (bir LocalScript , bir ModuleScript gerektiren bir LocalScript , veya bir Script ile RunContext ayarlanmış bir Enum.RunContext.Client ), bu yöntem true döndürecektir.Diğer tüm durumlarda, bu yöntem false döndürecektir.
Bu yöntem true döndürürse, mevcut çevre, RunService.PreRender veya Players.LocalPlayer gibi yalnızca istemciye ait özelliklere erişebilir.
Dönüşler
Mevcut çevrenin istemciyi çalıştırıp çalışmadığı.
IsEdit
Bu yöntem, mevcut çevrenin "düzenle" modunda olup olmadığını döndürür, örneğin Studio'da deneyim çalışmıyorsa.
IsEdit() simülasyon duraklatıldığında hariç, tersini döndürecektir IsRunning() , bu durumda her iki yöntem de false geri dönecektir.
Dönüşler
Mevcut çevre "düzenle" modundayken.
IsRunMode
Bu yöntem, Çalıştırma düğmesinin Studio'da simülasyonu çalıştırmak için basılıp basılmadığını döndürür.Simülasyon düğmesi kullanılarak duraklatıldığında geri dönmeye devam edecek; ancak, Durdur düğmesini kullanarak durdurulduktan sonra, geri dönmeye dönecek .
Studio'nun yalnızca Çal düğmesine basıldığında "çalıştır" moduna girdiğini unutmayın, Oyna düğmesine değil.Ayrıca, bu yöntemin simülasyonu çalıştırmak yerine çalıştırmak düğmesini kullanarak başlatıldığında döneceğini unutmayın.
Dönüşler
Çalıştır düğmesinin Studio'da simülasyonu çalıştırmak için basılmış olup olmadığı.
IsRunning
Deneyimin şu anda çalışıp çalışmadığını döndürür, yani simülasyon Çalıştır veya Oyna düğmeleri kullanılarak çalıştırıldı.
IsRunning() daima simülasyon duraklatıldığında istisna dışında IsEdit() 'nin tersini geri verecektir, bu durumda her iki yöntem de false dönecektir.
Dönüşler
Deneyimin şu anda çalışıyor olup olmadığı.
IsServer
Bu yöntem, mevcut çevrenin sunucuda çalışıp çalışmadığını döndürür.Bu yöntemi çağıran kod bir sunucu bağlamında çalışıyorsa (bir Script ile RunContext set edilmiş Enum.RunContext.Server veya Enum.RunContext.Legacy , veya bir ModuleScript tarafından gerekli bir Script ), bu yöntem true döndürecektir.Diğer tüm durumlarda, bu yöntem false döndürecektir.
Bu işlev doğru dönerse, mevcut çevre, ServerStorage veya ServerScriptService gibi sunucu özel özelliklere erişebilir.
Dönüşler
Mevcut çevrenin sunucuda çalışıp çalışmadığı.
IsStudio
Bu yöntem, mevcut çevrenin Studio'da çalışıp çalışmadığını döndürür. Studio'da sadece test edildiğinde yürütülmesi gereken kodu sarma için kullanılabilir.
Dönüşler
Mevcut çevrenin Stüdyo'da çalışıp çalışmadığı.
Pause
Bu yöntem deneyimin simülasyonunu duraklatır, eğer çalışıyorsa fiziği ve senaryoları askıya alır.Simülasyon veya Studio'daki Çalıştır düğmesini kullanarak başlatılabilir; simülasyon duraklatıldığında, geri dönecektir.
Dönüşler
Run
Bu yöntem deneyimin simülasyonunu yürütür (fizik ve senaryolar).Simülasyon çalışırken, IsRunning() geri dönecek true .Ancak, sadece simülasyon Studio'daki Çalıştırma düğmesi kullanılarak başlatıldığında geri dönecektir.
Dönüşler
Stop
Bu yöntem deneyimin simülasyonunu durdurur, eğer çalışıyorsa.Simülasyon durdurulduğunda, geri dönecek ve geri dönecek .
Studio'daki Durdur düğmesine karşın, bu yöntemi çağırmak deneyimi, simülasyon yürütülmeden önceki durumuna geri getirmeyecektir.Bu, fiziği simülasyonu ve senaryoları tarafından deneyime yapılan herhangi bir değişiklik, simülasyon bitince süreklilik kazanacaktır.
Dönüşler
UnbindFromRenderStep
BindToRenderStep() adı verilen bir işlev gönderildiğinde, bu yöntem işlevin PreRender sırasında çağrılmasını bırakacaktır.Bu, bağlı işlevler artık gerekmediğinde veya her adımın ateşlenmesi gerekmediğinde bağlanmış işlevlerin bağlantısını kesmek için kullanılır.
Verilen isim tarafından bağlı işlev yoksa, bu yöntem herhangi bir eylem yapmaz ve bir hata yükseltmeden devam eder.
Parametreler
İşlevin bağlantısının kesildiği adı.
Dönüşler
Etkinlikler
Heartbeat
The Heartbeat etkinliği, fiziğin simülasyonu tamamlandıktan sonra her kare ateşlenir.The deltaTime argümanı, önceki çerçeveden beri geçen süreyi gösterir.
Bu olay çoğu kodun çalıştığı sırada gerçekleşir.Her kare sonunda meydana gelir ve ayrıca herhangi bir bekleme kodu çalıştırıldığında, örneğin task kütüphanesiyle planlananlardan.Heartbeat Düzenli görevler için yaygın olarak kullanılır, örneğin sağlık yenileme gibi temel oyun sistemlerini güncellemek.
Bu adımdan sonra, motor, özellik güncellemelerini ve olaylarını daha sonra yeniden yazma adımının bir parçası olarak alınan sunucuya veya müşterilere gönderir.
Parametreler
Önceki çerçeveden beri geçen süre (saniyeler).
PostSimulation
The PostSimulation etkinliği, fiziğin simülasyonu tamamlandıktan sonra her kare ateşlenir.The deltaTimeSim argümanı, mevcut çerçevenin fiziği simülasyonuna adım attığı süreyi gösterir, fiziği sınırlandırmayı hesaba katmaz.
Bu etkinlik, simulasyonun sonuçlarına son düzeltmeler yapmak için yararlıdır. Bu aşamadan sonra motor Heartbeat etkinliğini tetikler.
Parametreler
Mevcut çerçevenin fiziği simülasyonuna adım attığı süre (saniyeler) ve fiziği sınırlandırmayı hesaba katmadan.
PreAnimation
The PreAnimation etkinliği, fiziğin simülasyonundan önce her kare ateşlenir, ancak renderden sonra.The deltaTimeSim argümanı, mevcut çerçeğin adımlı animasyona sahip olduğu süreyi gösterir.
Bu etkinlik, hızını veya önceliğini ayarlamak gibi animasyon nesnelerinin değiştirilmesi için yararlıdır.PreAnimation etkinliği tamamlandıktan sonra, motor bu animasyonları çalıştırır ve daha sonra fiziğin simülasyonu sırasında nesneleri güncelleştirmek için kullanılacak ortak dönüşümleri günceller.
Animasyonlar adımlandıktan sonra, motor PreSimulation etkinliğini tetikler.
Parametreler
Mevcut çerçeğin adımlı animasyonlara sahip olduğu süre (saniyeler).
PreRender
The PreRender etkinliği (RenderStepped için değiştirme) her çerçeğin çizilmeden önce her çerçeği ateş eder.The deltaTimeRender argümanı, önceki çerçeveden beri geçen süreyi gösterir.
Bu etkinlik, kodu çalıştırmanızı ve bir oyuncunun ekranına çizilmeden önce dünyayı güncellemenizi sağlar.Bu, değişen nesne konumlarını değiştirmek, animasyonları güncellemek veya görsel efektler hazırlamak gibi son dakika ayarları için yararlıdır, ancak motor bu olayda çalışan kodun bitmesine kadar görsel efektleri renderlemeye başlayamayacağından tasarruflu bir şekilde kullanılmalıdır.
As PreRender , istemci tarafında olduğundan, sadece bir LocalScript , bir ModuleScript , bir LocalScript tarafından gerekli bir Script veya bir RunContext ile Enum.RunContext.Client içinde kullanılabilir.
PreRender fazının ardından, simülasyon fazı PreAnimation etkinliği ile başlar.
Parametreler
Önceki çerçeveden beri geçen süre (saniyeler).
PreSimulation
The PreSimulation etkinliği (Stepped için değiştirme) fiziği simülasyonundan önce her kareyi ateş eder.deltaTimeSim argümanı, mevcut çerçevenin fiziği simülasyonuna adım atacağı süreyi gösterir, fiziği sınırlandırmayı hesaba katmaz.
Bu etkinlik, hız veya kuvvet gibi özellikleri, simülasyonun bir parçası olarak uygulanmadan önce ayarlamak için yararlıdır.Simülasyon daha sonra, muhtemelen birden fazla kez çalışır, çünkü fiziği çözücü diğer motor sistemlerinden daha yüksek frekansla çalışır.Bunlar tamamlandığında, PostSimulation etkinliği ateşlenir.
Parametreler
Mevcut çerçevenin fiziği simülasyonuna adım atacağı süre (saniyeler) ve fiziği sınırlandırmayı hesaba katmadan.
RenderStepped
Her çerçeği, çerçeğin görüntülenmeden önce ateş eder.
Göç Notu
Bu olay yeni çalışma için kullanılması gereken PreRender tarafından geçersiz kılınmıştır.
Parametreler
Önceki çerçeveden beri geçen süre (saniyeler).
Stepped
Fiziği simülasyonundan önce her kareyi ateş eder.
Göç Notu
Bu olay yeni çalışma için kullanılması gereken PreSimulation tarafından geçersiz kılınmıştır.
Parametreler
RunService'nin çalıştığı süre (saniye).
Önceki çerçeveden beri geçen süre (saniyeler).