RunService

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
服務
未複製

RunService 包含用於時間管理的方法和事件以及用於管理體驗或腳本運行的上下文。方法如 IsClient() , IsServer()IsStudio() 可以幫助您確定在哪個上下文代碼運行。這些方法對於 ModuleScripts 有用,可能需要由客戶端和服務器端的腳本共同使用。此外,IsStudio() 可用於在 Studio 測試中添加特殊行為。

RunService 也包含允許您的代碼遵守 Roblox 框架循環的事件,例如 PreRender , PreAnimation , PreSimulation , PostSimulationHeartbeat 。選擇適當的事件以在任何情況下使用是很重要的,因此您應該閱讀 任務排程器 來做出明智的決定。

上下文測試結果

<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:正在執行()|正在執行</code></th>
<th><code>Class.RunService:IsRunMode()|IsRunMode</code></th>
</tr>
</thead>
<tbody>
<tr>
<td>實時玩家</td> <td><code>false</code> ></td> <td><code>真實</code> ></td> <td><code>假</code> ></td>
<td />
<td />
<td />
</tr>
<tr>
<td>實時伺服器</td> <td><code>false</code> ></td> <td><code>false</code> ></td> <td><code>true</code> ></td>
<td />
<td />
<td />
</tr>
<tr>
<td>編輯模式</td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>否</code></td>
</tr>
<tr>
<td>合作編輯</td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>否</code></td>
</tr>
<tr>
<td>執行模式</td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>真的</code></td>
</tr>
<tr>
<td>遊戲模式(客戶)</td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
</tr>
<tr>
<td>遊戲模式(伺服器)</td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>真的</code></td>
</tr>
<tr>
<td>團隊測試(玩家)</td>
<td><code>真的</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
</tr>
<tr>
<td>團隊測試(服務器)</td>
<td><code>否</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
<td><code>真的</code></td>
<td><code>否</code></td>
</tr>
</tbody>
環境

概要

屬性

方法

活動

屬性

ClientGitHash

唯讀
未複製
Roblox 指令碼安全性
平行讀取
未複製
外掛程式安全性
平行讀取

方法

BindToRenderStep

()

BindToRenderStep() 函數會將自訂功能綁定到在渲染步驟期間特定時間呼叫。有三個主要論點:namepriority、以及要呼叫的內容function

由於與客戶端的渲染過程相關,BindToRenderStep()只能在客戶端上呼叫。

名稱

name 參數是綁定的標籤,可以與 RunService:UnbindFromRenderStep() 一起使用,如果綁定不再需要。


local RunService = game:GetService("RunService")
local function functionToBind() end
-- 將上面的功能綁定到名為「tempBinding」的綁定中
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- 取消「tempBinding」綁定的功能
RunService:UnbindFromRenderStep("tempBinding")
優先級

綁定的 priority 是整數;它決定在渲染步驟期間呼叫自訂函數的時間。數字越低,呼叫自訂函數的時間就越早。如果兩個綁定具有相同的優先級,Roblox 引擎將隨機選擇其中一個先執行。預設 Roblox 控制腳本會以下列優先級運行:

  • 玩家輸入:100
  • 相機控件:200 為了方便;枚舉 Enum.RenderPriority 可用於確定整數值以設置綁定。例如,要在預設攝影機更新之前建立綁定權限,只需從相機優先等級中扣除 1 即可。

當使用 Enum.RenderPriority 時,請記得在所需枚舉的結尾使用 .ValueRunService:BindToRenderStep() 將無法運作,如果只使用枚舉本擁有。


local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- 這裡的代碼將在預設 Roblox 攝影機腳指令碼之前運行
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
自訂功能和 Delta 時間

最後一個參數(function)是要呼叫的自訂函數。此功能將傳遞一個名為 deltaTime 的參數,該參數顯示從上一個渲染步的開始到當前渲染步的開始之間的時間。

所有渲染更新將等待直到渲染步驟中的代碼完成。確保任何由 BindToRenderStep() 呼叫的代碼快速且高效地運行;如果代碼花費太長時間,體驗視覺效果將會粗魯。

參數

name: string

標籤用於綁定,可以與 Unbind 一起使用,如果綁定不再需要。

預設值:""
priority: number

綁定的優先級作為整數;它決定在渲染步驟期間呼叫自訂函數的時間。數字越低,呼叫自訂函數的時間就越早。如果兩個綁定具有相同的優先級,Roblox 引擎將隨機選擇其中一個先執行。

預設值:""
function: function

正在綁定的自訂函數。

預設值:""

返回

()

範例程式碼

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

平行寫入

如果使用此方法的代碼在客戶端上運行(在 、在 由 要求、或在 設置為 ,則此方法將返回 。在所有其他情況下,此方法將返回 false

如果此方法返回 true,現有環境可以存取僅限於客戶端的功能,例如 RunService.PreRenderPlayers.LocalPlayer


返回

目前環境是否運行客戶端。

IsEdit

外掛程式安全性
平行寫入

這個方法返回目前環境是否處於「編輯」模式,例如在 Studio 中,當體驗未運行時。

IsEdit() 將返回IsRunning()的反向,除非模擬已暫停,否則兩種方法都將返回false


返回

目前環境是否處於「編輯」模式。

IsRunMode

平行寫入

這個方法返回是否按下了 執行 按鈕以在 Studio 中執行模擬。如果使用 true 暫停模擬,它將繼續返回 **** ;然而,一旦使用 停止按鈕 停止模擬,它將回到返回 false 的狀態。

請注意,Studio 只有在按下 執行 按鈕時才會進入「執行」模式,而不是按下 播放 按鈕。請注意,此方法會返回 如果模擬使用 而不是 執行 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用 按鈕開始,則會返回 如果模擬使用按鈕開始按鈕開始,則會返回 如果模擬使用按鈕開始按鈕開始按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按鈕按按鈕按按按按按按鈕按按按按鈕按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按按


返回

無論 執行 按鈕是否已按下以在 Studio 中執行模擬。

IsRunning

返回體驗目前是否運行中,即模擬使用了 執行播放 按鈕執行。

IsRunning() 將永遠返回IsEdit()的逆轉,除非模擬已暫停,否則兩種方法都將返回false


返回

體驗目前是否運行中。

IsServer

平行寫入

此方法返回目前環境是否在伺服器上運行。如果使用此方法的代碼在伺服器上下執行(在 中設置為 或 或在 需要的伺服器上下執行),此方法將返回 。在所有其他情況下,此方法將返回 false

如果此功能返回真值,則當前環境可以存取僅限伺服器的功能,例如 ServerStorageServerScriptService


返回

目前環境是否在伺服器上運行。

IsStudio

平行寫入

這個方法返回目前環境是否在 Studio 中運行。它可以用來包裝在 Studio 中僅應執行時才會執行的代碼。


返回

目前環境是否在 Studio 中運行。

Pause

()
外掛程式安全性

此方法會暫停執行中的體驗模擬,停用物理和腳本,如果正在運行。模擬可以使用 Run() 或 Studio 的 執行 按鈕開始;當模擬暫停時,IsRunning() 將返回 false


返回

()

Run

()
外掛程式安全性

此方法執行體驗的模擬(物理和腳本)。當模擬運行時,IsRunning()將返回true。但是,IsRunMode()只會返回true,如果模擬使用Studio中的 執行 按鈕開始。


返回

()

Stop

()
外掛程式安全性

這個方法會停止執行中的體驗模擬,如果它正在運行。當模擬停止時,IsRunning()將返回falseIsEdit()將返回true

與 Studio 中的 停止 按鈕不同,呼叫此方法不會將體驗恢復到模擬執行行前的狀態。這意味著物理模擬和腳本對體驗所做的任何變更將在模擬結束後保持。


返回

()

UnbindFromRenderStep

()

當傳送到 BindToRenderStep() 的函數名稱時,此方法將解除函數在 PreRender 期間被呼叫的綁定。這是用於在不再需要時解除綁定的函數,或當它們不再需要發射每一步時。

如果指定名稱沒有綁定函數,這個方法不會執行任何操作,並繼續無錯誤地進行。

參數

name: string

正在解除綁定的功能名稱。

預設值:""

返回

()

活動

Heartbeat

事件在物理模擬完成後,每一個框架都會發生。deltaTime 參數指示自上一個框架以來過去的時間。

這個事件是大多數腳本運行的時候。它發生在每個框架結束時,也是當任何等待腳本執行時,例如使用 task 圖形庫預定的腳本。Heartbeat 通常用於定期任務,例如更新核心遊戲系統,如生命重生。

在此步驟之後,引擎將屬性更新和事件傳送給服務器或客戶,這些更新和事件稍後會作為 複製步驟 的一部分收到。

參數

deltaTime: number

時間(秒),已過去自上一個框架。


PostSimulation

事件在物理模擬完成後,每一個框架都會發生。deltaTimeSim 參數指示當前框架已經步入物理模擬時間,不考慮物理限制。

這個事件對於做出模擬結果的最後調整有用。在此階段之後,引擎會觸發 Heartbeat 事件。

參數

deltaTimeSim: number

當前框架已經步入物理模擬的時間(秒),不包括物理限制。


PreAnimation

事件在物理模擬之前,每一個框架發生,但渲染後。deltaTimeSim 參數指示當前框架已步入動畫的時間。

這個事件對於修改動畫對象,例如調整速度或優先級有用。一旦 PreAnimation 事件完成,引擎將繼續執行這些動畫,更新將在物理模擬期間用於更新對象的聯合變形。

動畫步過後,引擎會觸發 PreSimulation 事件。

參數

deltaTimeSim: number

當前框架有步驟動畫的時間(秒)。


PreRender

PreRender(取代RenderStepped)在每個框架渲染之前發射,每個框架都會發生。deltaTimeRender 參數指示自上一個框架以來過去的時間。

這個事件讓您在代碼運行和更新世界之前在玩家的屏幕上繪製。這對於最後一刻的調整,例如變更對象位置、更新動畫或準備視覺效果來說有用,但應該盡量少使用,因為引擎不會在此事件中執行代碼直到完成執行為止。

因為 PreRender 是客戶端,只能在 LocalScript 、在 ModuleScriptLocalScript 要求,或在 Script 中設置 RunContextEnum.RunContext.Client

PreRender 階段之後,模擬階段以 PreAnimation 事件開始。

參數

deltaTimeRender: number

時間(秒),已過去自上一個框架。


PreSimulation

PreSimulation(取代Stepped)在物理模擬之前發射每一個框架。deltaTimeSim 參數指示當前框架將進行物理模擬的時間,不考慮物理限制。

這個事件對調整速度或力量等屬性很有用,在它們被用作模擬的一部分之前應用。模擬然後運行,可能多次,因為物理解決器的頻率比其他引擎系統高。一旦完成,PostSimulation將被發射。

參數

deltaTimeSim: number

當前框架將進行物理模擬的時間(秒),不考慮物理限制。


RenderStepped

在框架渲染之前,發射每個框架。

移轉記錄

此事件已被 PreRender 取代,該應用程式應用於新工作。

參數

deltaTime: number

時間(秒),已過去自上一個框架。


Stepped

在物理模擬之前,發射每一個框架。

移轉記錄

此事件已被 PreSimulation 取代,該應用程式應用於新工作。

參數

time: number

RunService 已運行的時間(秒)。

deltaTime: number

時間(秒),已過去自上一個框架。