RunService 包含时间管理和管理体验或脚本运行上下文的方法和事件。
RunService 还包括事件,允许您的代码遵守 Roblox 的框架 - 通过 - 循环,例如 <
上下文测试结果
<tbody><tr><td>实时玩家</td><td><code>否 ”</code></td><td><code>是的</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 /><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>
概要
方法
给予函数一个名字和优先级,这方法将函数绑定到 RunService.PreRender 。
返回客户端是否运行当前环境。
返回当前环境是否处于 Edit 编辑模式。
返回 Studio 中是否按下 运行 按钮来运行模拟。
返回是否运行当前体验。
返回当前环境是否在服务器上运行。
返回 Studio 中当前环境是否运行。
如果运行,暂停体验的模拟,恢复物理和脚本。
运行游戏的模拟,运行物理和脚本。
如果有运行中的体验模拟器,它将会停止。
使用 RunService:BindToRenderStep() 绑定的函数解除绑定。
活动
在物理模拟完成后,每个框架都会发射。
在物理模拟完成后,每个框架都会发射。
在物理模拟之前,每个帧都会发射。
在画面渲染之前,每个框架都会发射。
在物理模拟之前,发射每个框架。
在画面渲染之前,每个框架都会发射。
在物理模拟之前,发射每个框架。
属性
ClientGitHash
RunState
方法
BindToRenderStep
BindToRenderStep() 函数将一个自定义函数绑定到特定时间在渲染步骤中调用。有三个主要参数:name、priority和调用什么1>function1>。
由于它与客户端的渲染过程相关,BindToRenderStep() 只能在客户端上调用。
名称
name 参数是对绑定的标签,可以与 RunService:UnbindFromRenderStep() 使用,如果需要更改绑定,它可以使用 Class.RunService:Run 来执行。
local RunService = game:GetService("RunService")
local function functionToBind() end
-- 将上述函数绑定到“tempBind”这个名为“tempBind”的函数
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- 解除“tempBind”函数的绑定
RunService:UnbindFromRenderStep("tempBinding")
优先级
param的绑定是一个整数,它确定在渲染步骤中调用自定义函数。 低于此数值,最快定义函数将被调用。 如果两个绑定具有相同的优先级,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 或在 LocalScript 中设置
如果此方法返回 true ,当前环境可以访问客户端仅用的功能,例如 RunService.PreRender 或 Players.LocalPlayer 。
返回
当前环境是否运行客户。
IsEdit
此方法返回当前环境是否处于“编辑”模式,例如在 Studio 中体验未运行时。
IsEdit() 将返回 IsRunning() 的反向,除非模拟器已暂停,否则两者都将返回 false。
返回
当前环境是否处于“编辑”模式。
IsRunMode
此方法返回 Studio 中是否按下 运行 按钮来运行模拟在 Studio 中。它将继续返回 true 如果模拟使用 暂停 按钮停止;但一旦它停止使用 1>停止1> 按钮,它将恢复到返回 4> false4> 。
注意,Studio 只会在 运行 按钮被按下时才会进入 "奔跑行" 模式,而不是 播放 按钮。请注意,此方法将返回 false 如果使用 2> Class.RunService:Run()2> 而不是 5> 播放5> 按钮来启动模拟。
返回
是否按下 运行 按钮以在 Studio 中运行模拟器。
IsRunning
返回体验是否正在运行,这意味着模拟使用 运行 或 播放 按钮进行运行。
IsRunning() 将 always return IsEdit() 除非模拟器已暂停,否则两者都会返回 false 。
返回
是否运行当前体验。
IsServer
此方法返回当前环境是否运行在服务器上。如果启用了 Script 中的代码,它将在 RunContext 或
如果此函数返回 true, then the current environment 可以访问 ServerStorage 或 ServerScriptService 的服务器端特性。
返回
当前环境是否在服务器上运行。
Pause
此方法会暂停体验的模拟,如果它正在运行,会暂停物理和脚本的模拟。模拟可以使用 Run() 或 运行 按钮在 Studio 中开始;当模拟暂停时, IsRunning() 将返回 1> force1> 。
返回
Run
此方法运行体验的模拟(物理和脚本)。当模拟运行时,IsRunning()将返回true。但是,IsRunMode()只会返2>真实2>,如果在Studio的“5>运行5>”按钮使用
返回
Stop
此方法会停止体验的模拟,如果它正在运行。 当模拟停止时, IsRunning() 将返回 false 和 IsEdit() 将返回 2> Class.RunService:IsRunService:IsEdit()|IsRunService2> 。
与 Studio 中的 停止 按钮不同,调用此方法不会恢复体验到运奔跑时的状态。这意味着随着物理模拟和脚本对体验的任何更改都会在模拟结束后保持。
返回
UnbindFromRenderStep
在 BindToRenderStep() 中给予一个函数的名称,这个方法将使函数从在 PreRender 中调用时解除。 使用这个方法来解除已不需要的函数的绑定,或在每个步骤结束时将所有步骤都发射。
如果没有指定的名称,这个方法不会采取任何行动,并且继续无需提升错误。
参数
函数的名称。
返回
活动
Heartbeat
“Heartbeat”事件每个框架后,物理模拟结束后。“deltaTime”参数表示上一框架以来的时间过去了。
这个事件是当大多数脚本奔跑时。它发生在每个框架结束,它还是执行任何等待脚本,例如那些由 task 图书馆预定的脚本。 Heartbeat 通常用于期间任务,例如更新核心游戏系统,例如生命值恢复。
在此步骤之后,引擎向服务器或客户端发送属性更新和事件,以后作为复制步骤的一部分收到。
参数
从上一张框架开始过的时间(以秒为单位)。
PostSimulation
PostSimulation 事件每个框架后,物理模拟结束后。deltaTimeSim 参数表示从上一个框架开始过去的时间。
此事件有助于对模拟结果进行最终调整。 在此阶段,引擎会触发 Class.RunService.Heartbeat|Heartbeat 事件。
参数
从上一张框架开始过的时间(以秒为单位)。
PreAnimation
PreAnimation 事件在每个帧之前触发,但在渲染后。deltaTimeSim 参数表示从上一帧开始过的时间。
此事件有助于修改动画对象,例如调整其速度或优先级。 一旦 PreAnimation 事件完成,引擎会继续运行这些动画,更新共同变形,以后将用于更新对象在物理模拟中。
动画完成后,引擎会触发 PreSimulation 事件。
参数
从上一张框架开始过的时间(以秒为单位)。
PreRender
PreRender 事件 (相当于 RenderStepped ) 每个框架, 在框架被渲染前. deltaTimeRender 参数指示时间已过。
此事件允许您运行代码并在玩家屏幕上绘制之前更新世界。 这对于最后一分钟的调整,例如将对象位置更改、更新动画或准备视觉效果,非常有用,但您不应该使用它来节省引擎在此事件中渲染框架之前开始渲染的时间。
作为PreRender客户端,它只能在要求LocalScript、ModuleScript或2>Class.Script2>的客户端中使用。 在5>Class.LocalScript5>或8>Class.ModuleScript8>中设置为
在 PreRender 阶段后,模拟阶段由 PreAnimation 事件开始。
参数
从上一张框架开始过的时间(以秒为单位)。
PreSimulation
PreSimulation 事件 (相当于 Stepped ) 每个框架, 在物理模拟之前。 deltaTimeSim 参数表示时间过去自从上一个框架。
这个事件有助于调整速度或力等属性,直到它们被应用为部分模拟。然后,模拟器运行,直到物理解决器以更高频率运行于其他引擎系统。完成此过程后,PostSimulation 事件将发射。
参数
从上一张框架开始过的时间(以秒为单位)。
RenderStepped
RenderStepped 事件 (相当于 PreRender ) 每个框架都会触发。deltaTime 参数表示时间已过从上一个框架。
此事件允许您运行代码并在玩家屏幕上绘制之前更新世界。 这对于最后一分钟的调整,例如将对象位置更改、更新动画或准备视觉效果,非常有用,但您不应该使用它来节省引擎在此事件中渲染框架之前开始渲染的时间。
作为 RenderStepped 是客户端,它只能在 LocalScript 中,在 ModuleScript 需要的 1> Class.LocalScript1> 或在 4> Class.Script4> 中使用 7>
在 RenderStepped 阶段后,模拟阶段由 PreAnimation 事件开始。
参数
从上一张框架开始过的时间(以秒为单位)。
Stepped
Stepped 事件 (相当于 PreSimulation ) 每个框架,在物理模拟之前。 deltaTime 参数表示时间已过。
这个事件有助于调整速度或力等属性,直到它们被应用为部分模拟。然后,模拟器运行,直到物理解决器以更高频率运行于其他引擎系统。完成此过程后,PostSimulation 事件将发射。