RunService

顯示已棄用項目

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

無法建立
服務
未複製

RunService 包含時間管理方法和事件,並且為管理體驗或腳本

RunService 也會包含允許您的代碼遵守 Roblox 的框架階段循環,例如 <

上下文測試結果

<tbody>
<tr>
<td>活動玩家</td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td />
<td />
<td />
</tr>
<tr>
<td>活動服務器</td>
<td><code>false</code></td>
<td><code>false</code></td>
<td><code>是的</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>false</code></td>
<td><code>false</code></td>
</tr>
<tr>
<td>協作編輯</td>
<td><code>是的</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>false</code></td>
</tr>
<tr>
<td>執行模式</td>
<td><code>是的</code></td>
<td><code>是的</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>是的</code></td>
</tr>
<tr>
<td>播放模式 (客戶)</td>
<td><code>是的</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
</tr>
<tr>
<td>播放模式 (伺服器)</td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>是的</code></td>
</tr>
<tr>
<td>團隊測試 (玩家)</td>
<td><code>是的</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
</tr>
<tr>
<td>團隊測試 (伺服器)</td>
<td><code>false</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
<td><code>是的</code></td>
<td><code>false</code></td>
</tr>
</tbody>

概要

屬性

方法

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

    提供一個函數的名字和優先級,這個方法將函數綁定到 RunService.PreRender

  • 平行寫入

    返回客戶端是否執行當前環境。

  • 外掛程式安全性
    平行寫入

    返回目前環境是否為 Edit 模式。

  • 平行寫入

    返回 Studio 中是否按下 執行 按鈕以執行模擬。

  • 返回是否為體驗目前執行。

  • 平行寫入

    返回是否在伺服器上執行目前環境。

  • 平行寫入

    返回 Studio 中是否執行目前環境。

  • Pause():void
    外掛程式安全性

    暫停運行中的體驗模擬,如果吊銷物理和指令碼。

  • Run():void
    外掛程式安全性

    執行遊戲的模擬,執行物理和指令碼。

  • Stop():void
    外掛程式安全性

    如果啟動,則停止體驗的模擬。

  • 解除使用 RunService:BindToRenderStep() 的渲染循環對象。

活動

屬性

ClientGitHash

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

方法

BindToRenderStep

void

BindToRenderStep() 函數將自訂函數綁定在特定時間內在渲染步驟中呼叫。有三個主要參數:namepriority 和「1>Function1>」呼叫。

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

名稱

name 參數是對綁定的標籤,可以用 RunService:UnbindFromRenderStep() 來取代綁定,如果需要解除綁定。


local RunService = game:GetService("RunService")
local function functionToBind() end
-- 將上述函數綁定到 "tempBind" 的名稱
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- 解除 "tempBind" 的功能綁定
RunService:UnbindFromRenderStep("tempBinding")
優先權

binding 的 $priority 是整數;它會決定在渲染步驟中呼叫自訂函數。如果二個 binding 的優先權相同,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

正在綁定自訂功能。


返回

void

範例程式碼

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
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)
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

平行寫入

如果使用此方法的代碼在客戶端上執行 (在 LocalScript 中,在 ModuleScript 需要 by a LocalScript

如果此方法返回 true ,當前環境可以存取客戶端專用功能,例如 RunService.PreRenderPlayers.LocalPlayer


返回

是否要執行目前環境中的客戶。

IsEdit

外掛程式安全性
平行寫入

此方法返回當前環境是否為「編輯」模式,例如 Studio 中的體驗未運行時。

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


返回

是否在 "編輯" 模式。

IsRunMode

平行寫入

此方法返回 Studio 中是否按下 執行 按鈕以執行模擬在 Studio 中。它會繼續返回 true 如果模擬使用 暫停 按鈕停止;然而,一旦它停止使用 1>停止1> 按鈕,它就會恢復返回 4> false

注意,Studio 只會在 執行 按鈕被按下時才會切換為 執行 模式,而不是 false 按鈕。 您也注意到這個方法將會檢查出 2> Class.RunService:Run()2> 以及 5> 8>Run8> 按鈕。


返回

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

IsRunning

返回是否運行中,這表示模擬已使用 執行播放 按鈕。

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


返回

是否要執行體驗。

IsServer

平行寫入

此方法返回是否在服務伺服器上執行當前環境。如果啟動此方法的代碼在服務器上執行,則會在 Script

如果此功能返回 true,則當前環境可以存取 ServerStorageServerScriptService 中的伺服器專用功能。


返回

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

IsStudio

平行寫入

此方法返回 Studio 中是否執行目前環境。它可以用於包裝僅在 Studio 中執行的代碼。


返回

是否 Studio 環境正在執行。

Pause

void
外掛程式安全性

此方法會暫停執行體驗的模擬,如果啟用物理和腳本懷疑,或者啟用懲罰遲延器,模擬可以使用 Run()執行 按鈕在 Studio 中開始;當模擬暫停時, Class.RunService:Is運行()


返回

void

Run

void
外掛程式安全性

此方法執行體驗的模擬(物理和指令碼)。當模擬正在執行時, IsRunning() 將返回 true。 但是, IsRunMode() 只會返回 2> true2> 如果


返回

void

Stop

void
外掛程式安全性

此方法會停止體驗的模擬,如果模擬正在執行。當模擬停止時,IsRunning()會返回false,而IsEdit()會返回2>真2>。

與 Studio 中的 停止 按鈕不同,呼叫此方法不會恢復體驗到 停止 狀態。這意味著由物理模擬和指令碼所作的任何對體驗的變更都會在模擬和指令碼結束後持續存在。


返回

void

UnbindFromRenderStep

void

指定一個函數名稱已傳送至 BindToRenderStep() ,此方法將解除函數在 PreRender 期間呼叫的需求。這是使用不再需要的功能來解除綁定的方法,或者在每個步驟發生時不再需要發射。

如果沒有指定的名稱,此方法不會執行任何操作,並且繼續無需提升錯誤。

參數

name: string

功能的名稱。


返回

void

活動

Heartbeat

Heartbeat 事件每個額外的 deltaTime 後會發生。deltaTime 參數表示從上一個額外的 1>Frame1> 到現在的時間。

這個事件發生在每個框架的結束,也是執行大多數脚本的時間。它還是執行任何等待的脚本,例如與 task 圖書館聯絡的。 Heartbeat 通常用於期間任務,例如更新核心遊戲系統。

此步驟後,引擎向伺服器或客戶端發送屬性更新和事件,後者將在複製步驟的一部分來自伺服器收到。

參數

deltaTime: number

自上一個框架起算的時間 (以秒計)。


PostSimulation

PostSimulation 事件每個框架後,物理模擬完成後會發生。deltaTimeSim 參數指示從上一個框架到現在的時間。

這個事件有助於對模擬結果進行最終調整。在這個階段,引擎會夥伴 Class.RunService.Heartbeat|Heartbeat 事件。

參數

deltaTimeSim: number

自上一個框架起算的時間 (以秒計)。


PreAnimation

PreAnimation 事件在每個幀率前發射,但在渲染後。deltaTimeSim 參數指示從上一個幀率開始到現在的時間。

這個事件有助於修改動畫對象,例如調整它們的速度或優先權。 一旦 PreAnimation 事件完成,引擎會執行這些動畫,更新聯合變形,以後將在物理模擬中使用對象更新。

動畫完成後,引擎會觸發 PreSimulation 事件。

參數

deltaTimeSim: number

自上一個框架起算的時間 (以秒計)。


PreRender

PreRender 事件 (與 RenderStepped 相當) 會在每個框架之前發射。deltaTimeRender 參數表示自從上一個框架開始過去的時間。

這個事件允許您執行程式碼並在玩家的螢幕上更新世界。 這很有用,例如變更對象位置、更新動畫或準備視覺效果,但應該用得慎重,因為引擎無法在此事件中執行 render 直到程式碼運行完畢。

作為 PreRender 是客戶端,它只能在 LocalScript 裡,在 ModuleScript 需要的,或在 1> Class.LocalScript1> 裡,與 4> Class.Script4> 設為

PreRender 階段後,模擬階段會從 PreAnimation 事件開始。

參數

deltaTimeRender: number

自上一個框架起算的時間 (以秒計)。


PreSimulation

PreSimulation 事件 (與 Stepped 相當) 會在每個畫面中發射,以前的物理模擬。deltaTimeSim 參數指示從上一個畫面到現在的時間。

這個事件有助於調整速度或力等屬性只是在模擬中應用之前。模擬會執行,直到模擬器處於更高的頻率運行,這個時候其他引擎系統的物理解決器將會執行。完成此事件後,PostSimulation 事件將會發生。

參數

deltaTimeSim: number

自上一個框架起算的時間 (以秒計)。


RenderStepped

RenderStepped 事件 (與 PreRender 相當) 會在每個框架之前發生。deltaTime 參數表示自從上一個框架開始過去的時間。

這個事件允許您執行程式碼並在玩家的螢幕上更新世界。 這很有用,例如變更對象位置、更新動畫或準備視覺效果,但應該用得慎重,因為引擎無法在此事件中執行 render 直到程式碼運行完畢。

作為 RenderStepped 是客戶端,它只能在 LocalScript 裡,在 ModuleScript 需要的,或在 1> Class.Script1> 裡,與 4> Class.BaseScript.RunContext|RunContext

RenderStepped 階段後,模擬階段會從 PreAnimation 事件開始。

參數

deltaTime: number

自上一個框架起算的時間 (以秒計)。


Stepped

Stepped 事件 (與 PreSimulation 相當) 會在每個畫面中發射,以前的物理模擬。deltaTime 參數表示從上一個畫面到現在的時間。

這個事件有助於調整速度或力等屬性只是在模擬中應用之前。模擬會執行,直到模擬器處於更高的頻率運行,這個時候其他引擎系統的物理解決器將會執行。完成此事件後,PostSimulation 事件將會發生。

參數

time: number

Class.RunService 的持續時間 (以秒計)。

deltaTime: number

自上一個框架起算的時間 (以秒計)。