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>
概要
方法
提供一個函數的名字和優先級,這個方法將函數綁定到 RunService.PreRender。
返回客戶端是否執行當前環境。
返回目前環境是否為 Edit 模式。
返回 Studio 中是否按下 執行 按鈕以執行模擬。
返回是否為體驗目前執行。
返回是否在伺服器上執行目前環境。
返回 Studio 中是否執行目前環境。
暫停運行中的體驗模擬,如果吊銷物理和指令碼。
執行遊戲的模擬,執行物理和指令碼。
如果啟動,則停止體驗的模擬。
解除使用 RunService:BindToRenderStep() 的渲染循環對象。
活動
在物理模擬完成後,每個畫面都會發射。
在物理模擬完成後,每個畫面都會發射。
在物理模擬之前,每個畫面都會發射。
在框架被渲染之前,發射每個框架。
在物理模擬之前,每個畫面都會發射。
在框架被渲染之前,發射每個框架。
在物理模擬之前,每個畫面都會發射。
屬性
ClientGitHash
RunState
方法
BindToRenderStep
BindToRenderStep() 函數將自訂函數綁定在特定時間內在渲染步驟中呼叫。有三個主要參數:name、priority 和「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
使用 Enum.RenderPriority 時,記得在所需枚列的結束使用 .Value 。 RunService: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() 呼叫的代碼都快速且有效率地執行;如果代碼需要太久,體驗視覺將會不清晰。
參數
將虛擬化貼件作為整數,它將決定在渲染步驟中呼叫自訂函數時何時。 將此數字越低,自訂函數就越快會被呼叫。 如果兩個虛擬化貼件的優先權相同,Roblox 引擎將隨機選擇一個來執行。
正在綁定自訂功能。
返回
範例程式碼
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
如果使用此方法的代碼在客戶端上執行 (在 LocalScript 中,在 ModuleScript 需要 by a LocalScript 或
如果此方法返回 true ,當前環境可以存取客戶端專用功能,例如 RunService.PreRender 或 Players.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,則當前環境可以存取 ServerStorage 或 ServerScriptService 中的伺服器專用功能。
返回
是否要在伺服器上執行目前環境。
Pause
此方法會暫停執行體驗的模擬,如果啟用物理和腳本懷疑,或者啟用懲罰遲延器,模擬可以使用 Run() 或 執行 按鈕在 Studio 中開始;當模擬暫停時, Class.RunService:Is運行()
返回
Stop
此方法會停止體驗的模擬,如果模擬正在執行。當模擬停止時,IsRunning()會返回false,而IsEdit()會返回2>真2>。
與 Studio 中的 停止 按鈕不同,呼叫此方法不會恢復體驗到 停止 狀態。這意味著由物理模擬和指令碼所作的任何對體驗的變更都會在模擬和指令碼結束後持續存在。
返回
UnbindFromRenderStep
指定一個函數名稱已傳送至 BindToRenderStep() ,此方法將解除函數在 PreRender 期間呼叫的需求。這是使用不再需要的功能來解除綁定的方法,或者在每個步驟發生時不再需要發射。
如果沒有指定的名稱,此方法不會執行任何操作,並且繼續無需提升錯誤。
參數
功能的名稱。
返回
活動
Heartbeat
Heartbeat 事件每個額外的 deltaTime 後會發生。deltaTime 參數表示從上一個額外的 1>Frame1> 到現在的時間。
這個事件發生在每個框架的結束,也是執行大多數脚本的時間。它還是執行任何等待的脚本,例如與 task 圖書館聯絡的。 Heartbeat 通常用於期間任務,例如更新核心遊戲系統。
此步驟後,引擎向伺服器或客戶端發送屬性更新和事件,後者將在複製步驟的一部分來自伺服器收到。
參數
自上一個框架起算的時間 (以秒計)。
PostSimulation
PostSimulation 事件每個框架後,物理模擬完成後會發生。deltaTimeSim 參數指示從上一個框架到現在的時間。
這個事件有助於對模擬結果進行最終調整。在這個階段,引擎會夥伴 Class.RunService.Heartbeat|Heartbeat 事件。
參數
自上一個框架起算的時間 (以秒計)。
PreAnimation
PreAnimation 事件在每個幀率前發射,但在渲染後。deltaTimeSim 參數指示從上一個幀率開始到現在的時間。
這個事件有助於修改動畫對象,例如調整它們的速度或優先權。 一旦 PreAnimation 事件完成,引擎會執行這些動畫,更新聯合變形,以後將在物理模擬中使用對象更新。
動畫完成後,引擎會觸發 PreSimulation 事件。
參數
自上一個框架起算的時間 (以秒計)。
PreRender
PreRender 事件 (與 RenderStepped 相當) 會在每個框架之前發射。deltaTimeRender 參數表示自從上一個框架開始過去的時間。
這個事件允許您執行程式碼並在玩家的螢幕上更新世界。 這很有用,例如變更對象位置、更新動畫或準備視覺效果,但應該用得慎重,因為引擎無法在此事件中執行 render 直到程式碼運行完畢。
作為 PreRender 是客戶端,它只能在 LocalScript 裡,在 ModuleScript 需要的,或在 1> Class.LocalScript1> 裡,與 4> Class.Script4> 設為
在 PreRender 階段後,模擬階段會從 PreAnimation 事件開始。
參數
自上一個框架起算的時間 (以秒計)。
PreSimulation
PreSimulation 事件 (與 Stepped 相當) 會在每個畫面中發射,以前的物理模擬。deltaTimeSim 參數指示從上一個畫面到現在的時間。
這個事件有助於調整速度或力等屬性只是在模擬中應用之前。模擬會執行,直到模擬器處於更高的頻率運行,這個時候其他引擎系統的物理解決器將會執行。完成此事件後,PostSimulation 事件將會發生。
參數
自上一個框架起算的時間 (以秒計)。
RenderStepped
RenderStepped 事件 (與 PreRender 相當) 會在每個框架之前發生。deltaTime 參數表示自從上一個框架開始過去的時間。
這個事件允許您執行程式碼並在玩家的螢幕上更新世界。 這很有用,例如變更對象位置、更新動畫或準備視覺效果,但應該用得慎重,因為引擎無法在此事件中執行 render 直到程式碼運行完畢。
作為 RenderStepped 是客戶端,它只能在 LocalScript 裡,在 ModuleScript 需要的,或在 1> Class.Script1> 裡,與 4> Class.BaseScript.RunContext|RunContext
在 RenderStepped 階段後,模擬階段會從 PreAnimation 事件開始。
參數
自上一個框架起算的時間 (以秒計)。
Stepped
Stepped 事件 (與 PreSimulation 相當) 會在每個畫面中發射,以前的物理模擬。deltaTime 參數表示從上一個畫面到現在的時間。
這個事件有助於調整速度或力等屬性只是在模擬中應用之前。模擬會執行,直到模擬器處於更高的頻率運行,這個時候其他引擎系統的物理解決器將會執行。完成此事件後,PostSimulation 事件將會發生。