RunService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
RunService berisi metode dan acara untuk manajemen waktu serta manajemen konteks di man
RunService juga menyimpan acara yang memungkinkan kode Anda untuk mematuhi atas frame-by-frame loop Roblox
Hasil Tester Konteks
<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>false</code></td><td><code>false</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>false</code></td><td><code>false</code></td></tr><tr><td>Edit Kerjasama</td><td><code>benar</code></td><td><code>benar</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td><td><code>false</code></td></tr><tr><td>Jalankan Mode</td><td><code>benar</code></td><td><code>benar</code></td><td><code>benar</code></td><td><code>false</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>false</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td></tr><tr><td>Mode Bermain (Server)</td><td><code>benar</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>benar</code></td></tr><tr><td>Tes Tim (Pemain)</td><td><code>benar</code></td><td><code>benar</code></td><td><code>false</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td></tr><tr><td>Pengujian Tim (Server)</td><td><code>false</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td><td><code>benar</code></td><td><code>false</code></td></tr></tbody>
Rangkuman
Properti
Metode
Diberikan nama string fungsi dan prioritas, metode ini menyambungkan fungsi ke RunService.PreRender .
Mengembalikan apakah lingkungan saat ini berjalan di klien.
Mengembalikan apakah lingkungan saat ini berada dalam mode Edit .
Mengembalikan apakah tombol Run telah ditekan untuk mengeksekusi simulasi di Studio.
Mengembalikan apakah pengalaman sedang berjalan.
Mengembalikan apakah lingkungan saat ini berjalan di server.
Mengembalikan apakah lingkungan saat ini dijalankan di Studio.
Menghentikan simulasi pengalaman jika itu berjalan, menghentikan fisika dan skrip.
Melakukan simulasi game, mengeksekusi fisika dan skrip.
Menghentikan simulasi pengalaman jika itu berjalan.
Mengubah fungsi yang terikat pada loop render menggunakan RunService:BindToRenderStep() .
Acara
Mengaktifkan setiap frame, setelah simulasi fisika telah selesai.
Mengaktifkan setiap frame, setelah simulasi fisika telah selesai.
Mengaktifkan setiap frame, sebelum simulasi fisika tetapi setelah render.
Mengaktifkan setiap frame, sebelum frame di render.
Mengaktifkan setiap frame, sebelum simulasi fisika.
Mengaktifkan setiap frame, sebelum frame di render.
Mengaktifkan setiap frame, sebelum simulasi fisika.
Properti
ClientGitHash
RunState
Metode
BindToRenderStep
Fungsi BindToRenderStep() menyambungkan fungsi khusus untuk dipanggil pada waktu tertentu selama langkah render. Ada tiga argumen utama: name, priority, dan apa 1> function1> untuk dipanggil.
Karena terkait proses render klien, BindToRenderStep() hanya dapat diakses di klien.
Nama
Parameter name adalah label untuk binding dan dapat digunakan dengan RunService:UnbindFromRenderStep() jika binding tidak lagi dibutuhkan.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Ikat fungsi di atas ke binding bernama "tempBind"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Nonaktifkan fungsi yang terikat untuk "tempBind"
RunService:UnbindFromRenderStep("tempBinding")
Prioritas
priority dari binding adalah angka; itu menentukan kapan selama langkah render untuk memanggil fungsi khusus. Angka bawah ini menentukan kapan fungsi khusus akan dipanggil. Jika dua binding memiliki prioritas yang sama, mesin Roblox akan secara acak memilih salah satu untuk dijalankan pertama. Skrip kontrol default Roblox berjalan dengan prioritas berikut:
- Masukan Pemain: 100
- Kontrol Kamera: 200 Untuk kenyamanan;册 Enum.RenderPriority dapat digunakan untuk menentukan nilai angka untuk menetapkan batas. Misalnya, untuk menetapkan batas kanan sebelum pembaruan kamera default, hanya kurangkan 1 dari levelprioritas kamera.
Saat menggunakan Enum.RenderPriority, ingatlah untuk menggunakan .Value di akhir daftar枚. RunService:BindToRenderStep() tidak akan berfungsi jika hanya daftar枚 digunakan memiliki.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Kode di sini akan berjalan sebelum naskah kamera Roblox default
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Fungsi Kustom dan Waktu Delta
Argumen terakhir ( function ) adalah fungsi kustom untuk dipanggil. Fungsi ini akan diberikan satu parameter bernama deltaTime yang menunjukkan berapa banyak waktu yang dilewati antara awal langkah render sebelumnya dan awal langkah render saat ini.
Semua pembaruan render akan menunggu sampai kode di render step selesai. Pastikan bahwa setiap kode yang dipanggil oleh BindToRenderStep() berjalan dengan cepat dan efisien; jika kode memakan waktu terlalu lama, visual pengalaman akan berantakan.
Parameter
Label untuk binding yang dapat digunakan dengan Unbind jika binding tidak lagi dibutuhkan.
Prioritas dari binding sebagai angka; itu menentukan kapan selama langkah render untuk memanggil fungsi khusus. Angka yang lebih rendah ini menentukan kapan selama langkah render untuk memanggil fungsi khusus. Jika dua binding memiliki prioritas yang sama, mesin Roblox akan secara acak memilih salah satu untuk dijalankan terlebih dahulu.
Fungsi khusus yang dibindung.
Memberikan nilai
Contoh Kode
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
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)
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
Jika kode yang mengeksekusi metode ini berjalan dalam konteks klien (dalam LocalScript , dalam ModuleScript yang diperlukan o
Jika metode ini mengembalikan true, lingkungan saat ini dapat mengakses fitur klien-only seperti RunService.PreRender atau Players.LocalPlayer.
Memberikan nilai
Apakah lingkungan saat ini menjalankan klien.
IsEdit
Metode ini mengembalikan apakah lingkungan saat ini dalam mode "edit", misalnya di Studio ketika pengalaman tidak berjalan.
IsEdit() akan mengembalikan kebalikan dari IsRunning() , kecuali ketika simulasi telah dihentikan, di mana kedua metode akan mengembalikan false .
Memberikan nilai
Apakah lingkungan saat ini dalam mode "edit".
IsRunMode
Metode ini mengembalikan apakah tombol Run telah ditekan untuk mengeksekusi simulasi di Studio. Ini akan terus mengembalikan true jika simulasi telah dihentikan menggunakan tombol Pause; namun, setelah dihentikan menggunakan tombol 2> Stop2>, itu akan kembali ke menyediakan 5>
Catat bahwa Studio hanya memasuki mode "jalankan" ketika tombol Jalankan ditekan, bukan tombol Mainkan. Juga catat bahwa metode ini akan mengembalikan false jika simulasi dimulai menggunakan 2> 5> Class.RunService:Run() 5> daripada tombol 8> 1>Mainkan1>.
Memberikan nilai
Apakah tombol Run telah ditekan untuk mengeksekusi simulasi di Studio.
IsRunning
Mengembalikan apakah pengalaman sedang berjalan, yang berarti simulasi telah dijalankan menggunakan tombol Lari atau Mainkan.
IsRunning() akan selalu mengembalikan kebalikan dari IsEdit() kecuali ketika simulasi telah dihentikan, di mana kedua metode akan mengembalikan false .
Memberikan nilai
Apakah pengalaman saat ini berjalan.
IsServer
Metode ini mengembalikan apakah lingkungan saat ini berjalan di server. Jika kode yang mengaktifkan metode ini berjalan di konteks server (dalam
Jika fungsi ini mengembalikan true, maka lingkungan saat ini dapat mengakses fitur server-only seperti ServerStorage atau ServerScriptService .
Memberikan nilai
Apakah lingkungan saat ini berjalan di server.
IsStudio
Metode ini mengembalikan apakah lingkungan saat ini berjalan di Studio. Ini dapat digunakan untuk mengemas kode yang hanya harus dijalankan saat diuji di Studio.
Memberikan nilai
Apakah lingkungan saat ini berjalan di Studio.
Pause
Metode ini menghentikan simulasi pengalaman jika itu berjalan, menyusupkan fisika dan skrip. Simulasi dapat dimulai menggunakan Run() atau tombol Run di Studio; ketika simulasi dihentikan, IsRunning() akan mengembalikan 1> false1> .
Memberikan nilai
Run
Metode ini mengeksekusi simulasi pengalaman (fisika dan skrip). Saat simulasi berjalan, IsRunning() akan mengembalikan true . Namun, IsRunMode() hanya akan mengembalikan 2> true2>
Memberikan nilai
Stop
Metode ini menghentikan simulasi pengalaman jika itu berjalan. Saat simulasi dihentikan, IsRunning() akan mengembalikan false dan IsEdit() akan mengembalikan 2>5> Class.RunService:IsEdit()|IsRun()5> .
Sebagai lawan dari tombol Berhenti di Studio, menyebut metode ini tidak akan mengembalikan pengalaman ke kondisi di mana itu 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
Diberikan nama fungsi yang dikirim ke BindToRenderStep() , metode ini akan menghapus fungsi dari menjadi panggil selama PreRender . Ini digunakan untuk menghapus fungsi yang tidak lagi dibutuhkan, atau ketika mereka tidak lagi perlu mengeksekusi setiap langkah.
Jika tidak ada fungsi yang terikat dengan nama yang diberikan, metode ini tidak mengambil tindakan dan melanjutkan tanpa menimbulkan kesalahan.
Parameter
Nama fungsi yang tidak bergantung.
Memberikan nilai
Acara
Heartbeat
Acara Heartbeat setiap frame, setelah simulasi fisik selesai. deltaTime argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini terjadi ketika sebagian besar script dijalankan. Ini terjadi di akhir setiap frame dan ini juga ketika setiap script tertunda yang dijalankan, seperti yang direncanakan dengan task library. Heartbeat sering digunakan untuk tugas periode, seperti menyelesaikan sistem game utama seperti regenerasi kesehatan.
Setelah langkah ini, mesin mengirim pembaruan status dan acara ke server atau klien yang nantinya diterima sebagai bagian dari langkah replikasi yang diterima.
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
PostSimulation
Acara PostSimulation menyetel setiap frame, setelah simulasi fisik telah selesai. deltaTimeSim argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini berguna untuk membuat penyesuaian terakhir pada hasil simulasi. Setelah fase ini, mesin mengaktifkan acara Heartbeat.
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
PreAnimation
Acara PreAnimation mengaktifkan setiap frame, sebelum simulasi fisika tetapi setelah render. deltaTimeSim argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini berguna untuk mengubah objek animasi, seperti menyesuaikan kecepatan atau prioritas mereka. Setelah acara PreAnimation selesai, mesin akan melanjutkan mengeksekusi animasi ini, menyetel ulang transformasi bersama yang kemudian akan digunakan untuk memperbarui objek selama simulasi fisik.
Setelah animasi dijalankan, mesin mengaktifkan acara PreSimulation .
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
PreRender
Acara PreRender (setara dengan RenderStepped ) mengeksekusi setiap frame, sebelum frame di render. deltaTimeRender argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini memungkinkan Anda untuk mengeksekusi kode dan menyetel dunia sebelum ditunjukkan di layar pemain. Ini berguna untuk penyesuaian tingkat terakhir seperti mengubah posisi objek, menyetel animasi, atau menyiapkan efek visual, tetapi itu harus digunakan dengan hati-hati karena mesin tidak dapat memulai mengeksekusi frame sampai kode berjalan dalam acara ini telah selesai mengeksekusi
Karena PreRender adalah sisi klien, itu hanya dapat digunakan dalam LocalScript , di ModuleScript yang diperlukan oleh 1> Class.LocalScript1> , atau di <
Setelah fase PreRender, fase simulasi dimulai dengan acara PreAnimation.
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
PreSimulation
Acara PreSimulation (setara dengan Stepped ) menyetel setiap frame, sebelum simulasi fisik. deltaTimeSim argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini berguna untuk menyesuaikan propperti seperti kecepatan atau kekuatan hanya sebelum mereka diterapkan sebagai bagian dari simulasi. Simulasi kemudian dijalankan, mungkin beberapa kali, ketika solver fisika berjalan pada frekuensi yang lebih tinggi daripada sistem mesin lainnya. Setelah ini selesai, acara PostSimulation diaktifkan.
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
RenderStepped
Acara RenderStepped (setara dengan PreRender ) mengeksekusi setiap frame, sebelum frame di render. deltaTime argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini memungkinkan Anda untuk mengeksekusi kode dan menyetel dunia sebelum ditunjukkan di layar pemain. Ini berguna untuk penyesuaian tingkat terakhir seperti mengubah posisi objek, menyetel animasi, atau menyiapkan efek visual, tetapi itu harus digunakan dengan hati-hati karena mesin tidak dapat memulai mengeksekusi frame sampai kode berjalan dalam acara ini telah selesai mengeksekusi
Karena RenderStepped adalah pihak klien, itu hanya dapat digunakan dalam LocalScript , di ModuleScript yang diperlukan oleh 1> Class.LocalScript1> , atau
Setelah fase RenderStepped, fase simulasi dimulai dengan acara PreAnimation.
Parameter
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.
Stepped
Acara Stepped (setara dengan PreSimulation ) mengeksekusi setiap frame, sebelum simulasi fisik. deltaTime argument menunjukkan waktu yang telah berlalu sejak frame sebelumnya.
Acara ini berguna untuk menyesuaikan propperti seperti kecepatan atau kekuatan hanya sebelum mereka diterapkan sebagai bagian dari simulasi. Simulasi kemudian dijalankan, mungkin beberapa kali, ketika solver fisika berjalan pada frekuensi yang lebih tinggi daripada sistem mesin lainnya. Setelah ini selesai, acara PostSimulation diaktifkan.
Parameter
Durasi (dalam detik) bahwa RunService telah berjalan selama.
Waktu (dalam detik) yang telah berlalu sejak frame sebelumnya.