RunService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan
Tidak Direplikasi

RunService berisi metode dan peristiwa untuk manajemen waktu serta untuk mengelola konteks di mana pengalaman atau skrip berjalan.Metode seperti IsClient() , IsServer() , dan IsStudio() dapat membantu Anda menentukan di bawah kode konteks apa yang dijalankan.Metode ini berguna untuk ModuleScripts yang mungkin diperlukan oleh klien dan skrip server.Selain itu, IsStudio() dapat digunakan untuk menambahkan perilaku khusus untuk pengujian di Studio.

RunService juga menyediakan acara yang memungkinkan kode Anda mematuhi loop frame-by-frame Roblox, seperti PreRender , PreAnimation , PreSimulation , PostSimulation , dan Heartbeat .Memilih acara yang tepat untuk digunakan untuk kasus apa pun adalah penting, jadi Anda harus membaca Jadwal Tugas untuk membuat keputusan yang tepat.

Hasil Pengujian Konteks

<th><code>Kelas.RunService:Apakah Studio()|IsStudio</code></th>
<th><code>Kelas.RunService:Adalah Klien()|IsClient</code></th>
<th><code>Kelas.RunService:Apakah Server()|IsServer</code></th>
<th><code>Kelas.RunService:Apakah Edit()|IsEdit</code></th>
<th><code>Kelas.RunService:Apakah Berjalan()|IsRunning</code></th>
<th><code>Kelas.RunService:IsRunMode()|IsRunMode</code></th>
</tr>
</thead>
<tbody>
<tr>
<td>Pemain Langsung</td><td><code>false</code> ></td><td><code>benar</code> ></td><td><code>false</code> ></td>
<td />
<td />
<td />
</tr>
<tr>
<td>Server Langsung</td><td><code>salah</code></td><td><code>salah</code> ></td><td><code>benar</code> ></td>
<td />
<td />
<td />
</tr>
<tr>
<td>Mode Edit</td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>salah</code></td>
</tr>
<tr>
<td>Edit Kolaboratif</td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>salah</code></td>
</tr>
<tr>
<td>Mode Eksekusi</td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>benar</code></td>
</tr>
<tr>
<td>Mode Bermain (Klien)</td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
</tr>
<tr>
<td>Mode Bermain (Server)</td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>benar</code></td>
</tr>
<tr>
<td>Pengujian Tim (Pemain)</td>
<td><code>benar</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
</tr>
<tr>
<td>Pengujian Tim (Server)</td>
<td><code>salah</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
<td><code>benar</code></td>
<td><code>salah</code></td>
</tr>
</tbody>
Lingkungan

Rangkuman

Properti

Metode

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

    Dengan memberikan nama string fungsi dan prioritas, metode ini mengikat fungsi ke RunService.PreRender.

  • Tulis Paralel

    Kembalikan apakah lingkungan saat ini berjalan di klien.

  • Keamanan Plugin
    Tulis Paralel

    Kembalikan apakah lingkungan saat ini berada dalam mode Edit .

  • Tulis Paralel

    Kembalikan apakah tombol Jalankan telah ditekan untuk menjalankan simulasi di Studio.

  • Kembalikan apakah pengalaman sedang berjalan saat ini.

  • Tulis Paralel

    Kembalikan apakah lingkungan saat ini berjalan di server.

  • Tulis Paralel

    Kembalikan apakah lingkungan saat ini berjalan di Studio.

  • Pause():()
    Keamanan Plugin

    Mematikan simulasi pengalaman jika sedang berjalan, menangguhkan fisika dan skrip.

  • Run():()
    Keamanan Plugin

    Mengeksekusi simulasi game, menjalankan fisika dan skrip.

  • Stop():()
    Keamanan Plugin

    Menghentikan simulasi pengalaman jika sedang berjalan.

  • Lepaskan fungsi yang terikat pada loop render menggunakan RunService:BindToRenderStep() .

Acara

Properti

ClientGitHash

Hanya Baca
Tidak Direplikasi
Keamanan Skrip Roblox
Baca Paralel
Tidak Direplikasi
Keamanan Plugin
Baca Paralel

Metode

BindToRenderStep

()

Fungsi BindToRenderStep() membind fungsi khusus untuk dipanggil pada waktu tertentu selama langkah rendering.Ada tiga argumen utama: name , priority , dan apa function untuk dipanggil.

Karena terhubung dengan proses rendering klien, BindToRenderStep() hanya dapat dipanggil pada klien.

Nama

Parameter name adalah label untuk pengikatan dan dapat digunakan dengan RunService:UnbindFromRenderStep() jika pengikatan tidak lagi diperlukan.


local RunService = game:GetService("RunService")
local function functionToBind() end
-- Bind fungsi di atas ke binding yang disebut "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Lepaskan fungsi yang terikat ke "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Prioritas

The priority dari binding adalah bilangan bulat; itu menentukan kapan selama langkah rendering untuk memanggil fungsi khusus.Semakin rendah angka ini, semakin cepat fungsi khusus akan dipanggil.Jika dua binding memiliki prioritas yang sama, Roblox Engine akan secara acak memilih satu untuk dijalankan terlebih dahulu.Skrip kontrol Roblox default dijalankan dengan prioritas spesifik ini:

  • Input Pemain: 100
  • Kontrol Kamera: 200 Untuk kenyamanan; enum Enum.RenderPriority dapat digunakan untuk menentukan nilai bulat untuk menetapkan binding.Sebagai contoh, untuk membuat hak pengikatan sebelum pembaruan kamera default, hanya perlu mengurangi 1 dari levelprioritas kamera.

Saat menggunakan Enum.RenderPriority , ingatlah untuk menggunakan .Value di akhir enum yang diinginkan. RunService:BindToRenderStep() tidak akan berfungsi jika hanya enum yang digunakan memiliki.


local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Kode di sini akan dijalankan sebelum skrip kamera Roblox default
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Fungsi Kustom dan Waktu Delta

Argumen terakhir ( function ) adalah fungsi khusus untuk dipanggil.Fungsi ini akan diberikan satu parameter yang disebut deltaTime yang menunjukkan berapa banyak waktu yang berlalu antara awal langkah rendering sebelumnya dan awal langkah rendering saat ini.

Semua pembaruan rendering akan menunggu sampai kode di langkah render selesai.Pastikan bahwa kode apa pun yang dipanggil oleh BindToRenderStep() berjalan dengan cepat dan efisien; jika kode memakan waktu terlalu lama, visual pengalaman akan kasar.

Parameter

name: string

Label untuk pengikatan yang dapat digunakan dengan Unbind jika pengikatan tidak lagi diperlukan.

Nilai Default: ""
priority: number

Prioritas pengikatan sebagai bilangan bulat; menentukan kapan selama langkah rendering untuk memanggil fungsi khusus.Semakin rendah angka ini, semakin cepat fungsi khusus akan dipanggil.Jika dua binding memiliki prioritas yang sama, Roblox Engine akan secara acak memilih satu untuk dijalankan terlebih dahulu.

Nilai Default: ""
function: function

Fungsi kustom yang dibindungkan.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

Tulis Paralel

Jika kode yang memanggil metode ini dijalankan dalam konteks klien (dalam LocalScript , dalam ModuleScript yang diperlukan oleh LocalScript , atau dalam Script dengan RunContext diatur ke Enum.RunContext.Client ), metode ini akan mengembalikan true .Dalam semua kasus lain, metode ini akan kembali false .

Jika metode ini mengembalikan true , lingkungan saat ini dapat mengakses fitur khusus klien seperti RunService.PreRender atau Players.LocalPlayer .


Memberikan nilai

Apakah lingkungan saat ini menjalankan klien.

IsEdit

Keamanan Plugin
Tulis Paralel

Metode ini men返回 apakah lingkungan saat ini berada dalam mode "edit", misalnya di Studio saat pengalaman tidak berjalan.

IsEdit() akan mengembalikan kebalikan dari IsRunning() , kecuali ketika simulasi telah dijeda, di mana kedua metode akan mengembalikan false .


Memberikan nilai

Apakah lingkungan saat ini berada dalam mode "edit".

IsRunMode

Tulis Paralel

Metode ini menyatakan apakah tombol Jalankan telah ditekan untuk menjalankan simulasi di Studio.Ini akan terus mengembalikan true jika simulasi telah dijeda menggunakan tombol Pause ; namun, setelah dihentikan menggunakan tombol Stop , ia akan kembali ke pengembalian false .

Perhatikan bahwa Studio hanya memasuki mode "jalankan" ketika tombol Jalankan ditekan, bukan tombol Bermain .Perhatikan juga bahwa metode ini akan kembali false jika simulasi dimulai menggunakan RunService:Run() bukan tombol Jalankan .


Memberikan nilai

Apakah tombol Jalankan telah ditekan untuk menjalankan simulasi di Studio.

IsRunning

Kembalikan apakah pengalaman sedang berjalan saat ini, yang berarti simulasi telah dijalankan menggunakan tombol Jalankan atau Mainkan .

IsRunning() akan selalu mengembalikan kebalikan dari IsEdit() kecuali saat simulasi telah dijeda, di mana kedua metode akan mengembalikan false .


Memberikan nilai

Apakah pengalaman sedang berjalan saat ini.

IsServer

Tulis Paralel

Metode ini meny返回 apakah lingkungan saat ini berjalan di server.Jika kode yang memanggil metode ini dijalankan dalam konteks server (dalam Script dengan RunContext diatur ke Enum.RunContext.Server atau Enum.RunContext.Legacy , atau di dalam ModuleScript yang diperlukan oleh Script ), metode ini akan mengembalikan true .Dalam semua kasus lain, metode ini akan kembali false .

Jika fungsi ini kembali benar, maka lingkungan saat ini dapat mengakses fitur khusus server seperti ServerStorage atau ServerScriptService.


Memberikan nilai

Apakah lingkungan saat ini berjalan di server.

IsStudio

Tulis Paralel

Metode ini menghasilkan apakah lingkungan saat ini berjalan di Studio. Ini dapat digunakan untuk mengemas kode yang hanya harus dieksekusi saat diuji di Studio.


Memberikan nilai

Apakah lingkungan saat ini berjalan di Studio.

Pause

()
Keamanan Plugin

Metode ini menghentikan simulasi pengalaman jika sedang berjalan, menangguhkan fisika dan skrip.Simulasi dapat dimulai menggunakan Run() atau tombol Jalankan di Studio; saat simulasi dipause, IsRunning() akan mengembalikan false .


Memberikan nilai

()

Run

()
Keamanan Plugin

Metode ini menjalankan simulasi pengalaman (fisika dan skrip).Ketika simulasi dijalankan, IsRunning() akan kembali true .Namun, IsRunMode() hanya akan mengembalikan true jika simulasi dimulai menggunakan tombol Jalankan di Studio.


Memberikan nilai

()

Stop

()
Keamanan Plugin

Metode ini menghentikan simulasi pengalaman jika sedang berjalan.Ketika simulasi dihentikan, IsRunning() akan kembali false dan IsEdit() akan kembali true .

Berbeda dengan tombol Berhenti di Studio, memanggil metode ini tidak akan mengembalikan pengalaman ke keadaan di mana ia berada sebelum simulasi dijalankan.Ini berarti setiap perubahan yang dibuat pada pengalaman oleh simulasi fisika dan skrip akan bertahan setelah simulasi berakhir.


Memberikan nilai

()

UnbindFromRenderStep

()

Dengan memberikan nama fungsi yang dikirim ke BindToRenderStep(), metode ini akan melepaskan fungsi dari dipanggil selama PreRender .Ini digunakan untuk melepaskan fungsi terikat setelah mereka tidak lagi dibutuhkan, atau ketika mereka tidak lagi perlu menembak setiap langkah.

Jika tidak ada fungsi terikat dengan nama yang diberikan, metode ini tidak mengambil tindakan dan melanjutkan tanpa menimbulkan kesalahan.

Parameter

name: string

Nama fungsi yang tidak terikat.

Nilai Default: ""

Memberikan nilai

()

Acara

Heartbeat

Peristiwa Heartbeat terjadi setiap frame, setelah simulasi fisika selesai.Argumen deltaTime menunjukkan waktu yang telah berlalu sejak frame sebelumnya.

Acara ini adalah ketika sebagian besar skrip dijalankan.Ini terjadi di akhir setiap frame dan juga ketika skrip tunggu dijalankan, seperti yang dijadwalkan dengan perpustakaan task. Heartbeat umumnya digunakan untuk tugas periodik, seperti memperbarui sistem permainan inti seperti regenerasi kesehatan.

Setelah langkah ini, mesin mengirim pembaruan properti dan peristiwa ke server atau klien yang kemudian diterima sebagai bagian dari langkah replikasi terima.

Parameter

deltaTime: number

Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.


PostSimulation

Peristiwa PostSimulation terjadi setiap frame, setelah simulasi fisika selesai.Argumen deltaTimeSim menunjukkan waktu bahwa frame saat ini telah melangkahkan simulasi fisika, tidak mempertimbangkan penyempit fisika.

Acara ini berguna untuk membuat penyesuaian terakhir pada hasil simulasi. Setelah fase ini, mesin memicu acara Heartbeat.

Parameter

deltaTimeSim: number

Waktu (dalam detik) bahwa frame saat ini telah melangkahkan simulasi fisika, tidak mempertimbangkan penyempit fisika.


PreAnimation

Peristiwa PreAnimation terjadi setiap frame, sebelum simulasi fisika tetapi setelah rendering.Argumen deltaTimeSim menunjukkan waktu ketika frame saat ini memiliki animasi langkah.

Acara ini berguna untuk memodifikasi objek animasi, seperti menyesuaikan kecepatan atau prioritas mereka.Setelah acara PreAnimation selesai, mesin melanjutkan menjalankan animasi ini, memperbarui transformasi bersama yang nantinya akan digunakan untuk memperbarui objek selama simulasi fisika.

Setelah animasi dijalankan, mesin memicu peristiwa PreSimulation.

Parameter

deltaTimeSim: number

Waktu (dalam detik) bahwa frame saat ini memiliki animasi langkah.


PreRender

Peristiwa PreRender (pengganti untuk RenderStepped) menembak setiap frame, sebelum frame diproses.Argumen deltaTimeRender menunjukkan waktu yang telah berlalu sejak frame sebelumnya.

Acara ini memungkinkan Anda untuk menjalankan kode dan memperbarui dunia sebelum ditarik di layar pemain.Ini berguna untuk penyesuaian menit terakhir seperti mengubah posisi objek, memperbarui animasi, atau menyiapkan efek visual, tetapi harus digunakan secara hemat karena mesin tidak dapat mulai menyajikan frame sampai kode yang dijalankan dalam acara ini selesai dieksekusi.

Sebagai PreRender adalah sisi klien, itu hanya dapat digunakan di LocalScript , di ModuleScript diperlukan oleh LocalScript , atau di Script dengan RunContext diatur ke Enum.RunContext.Client.

Setelah fase PreRender, fase simulasi dimulai dengan peristiwa PreAnimation.

Parameter

deltaTimeRender: number

Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.


PreSimulation

Peristiwa PreSimulation (pengganti untuk Stepped) menembak setiap frame, sebelum simulasi fisika.Argumen deltaTimeSim menunjukkan waktu ketika frame saat ini akan melangkahkan simulasi fisika, tidak mempertimbangkan penyempit fisika.

Acara ini berguna untuk menyesuaikan properti seperti kecepatan atau kekuatan sebelum mereka diterapkan sebagai bagian dari simulasi.Simulasi kemudian dijalankan, mungkin beberapa kali, saat solver fisika berjalan dengan frekuensi lebih tinggi dari sistem mesin lainnya.Setelah ini selesai, acara PostSimulation ditembakkan.

Parameter

deltaTimeSim: number

Waktu (dalam detik) bahwa frame saat ini akan melangkahkan simulasi fisika, tidak mempertimbangkan penyempit fisika.


RenderStepped

Memicu setiap frame, sebelum frame diproses.

Catatan Migrasi

Peristiwa ini telah digantikan oleh PreRender yang harus digunakan untuk pekerjaan baru.

Parameter

deltaTime: number

Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.


Stepped

Memicu setiap frame, sebelum simulasi fisika.

Catatan Migrasi

Peristiwa ini telah digantikan oleh PreSimulation yang harus digunakan untuk pekerjaan baru.

Parameter

time: number

Durasi (dalam detik) yang RunService telah berjalan selama.

deltaTime: number

Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.