RunService

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建
服务
未复制

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>
环境IsStudioIsClientIsServerIsEditClass.RunService:Is运行()|Is运行IsRunMode

概要

属性

方法

活动

属性

ClientGitHash

只读
未复制
Roblox 脚本安全性
读取并联
未复制
插件安全性
读取并联

方法

BindToRenderStep

void

BindToRenderStep() 函数将一个自定义函数绑定到特定时间在渲染步骤中调用。有三个主要参数:namepriority和调用什么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
  • 相机控制:200 为了方便; Enum.RenderPriority 枚列可以用于确定设置绑定的整数值。 例如,在默认相机更新之前,您可以通过减去 1 从相机优先等级级别中使用。

使用 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() 中调用的任何代码都快速和高效运行,如果代码需要太长时间,体验视觉效果将会模糊。

参数

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 或在 LocalScript 中设置

如果此方法返回 true ,当前环境可以访问客户端仅用的功能,例如 RunService.PreRenderPlayers.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 可以访问 ServerStorageServerScriptService 的服务器端特性。


返回

当前环境是否在服务器上运行。

IsStudio

写入并联

此方法返回 Studio 中当前环境是否运行。它可以用于包装在 Studio 中测试时执行的代码。


返回

Studio 中当前环境是否运行。

Pause

void
插件安全性

此方法会暂停体验的模拟,如果它正在运行,会暂停物理和脚本的模拟。模拟可以使用 Run()运行 按钮在 Studio 中开始;当模拟暂停时, IsRunning() 将返回 1> force1> 。


返回

void

Run

void
插件安全性

此方法运行体验的模拟(物理和脚本)。当模拟运行时,IsRunning()将返回true。但是,IsRunMode()只会返2>真实2>,如果在Studio的“5>运行5>”按钮使用


返回

void

Stop

void
插件安全性

此方法会停止体验的模拟,如果它正在运行。 当模拟停止时, IsRunning() 将返回 falseIsEdit() 将返回 2> Class.RunService:IsRunService:IsEdit()|IsRunService2> 。

与 Studio 中的 停止 按钮不同,调用此方法不会恢复体验到运奔跑时的状态。这意味着随着物理模拟和脚本对体验的任何更改都会在模拟结束后保持。


返回

void

UnbindFromRenderStep

void

BindToRenderStep() 中给予一个函数的名称,这个方法将使函数从在 PreRender 中调用时解除。 使用这个方法来解除已不需要的函数的绑定,或在每个步骤结束时将所有步骤都发射。

如果没有指定的名称,这个方法不会采取任何行动,并且继续无需提升错误。

参数

name: string

函数的名称。


返回

void

活动

Heartbeat

Heartbeat”事件每个框架后,物理模拟结束后。“deltaTime”参数表示上一框架以来的时间过去了。

这个事件是当大多数脚本奔跑时。它发生在每个框架结束,它还是执行任何等待脚本,例如那些由 task 图书馆预定的脚本。 Heartbeat 通常用于期间任务,例如更新核心游戏系统,例如生命值恢复。

在此步骤之后,引擎向服务器或客户端发送属性更新和事件,以后作为复制步骤的一部分收到。

参数

deltaTime: number

从上一张框架开始过的时间(以秒为单位)。


PostSimulation

PostSimulation 事件每个框架后,物理模拟结束后。deltaTimeSim 参数表示从上一个框架开始过去的时间。

此事件有助于对模拟结果进行最终调整。 在此阶段,引擎会触发 Class.RunService.Heartbeat|Heartbeat 事件。

参数

deltaTimeSim: number

从上一张框架开始过的时间(以秒为单位)。


PreAnimation

PreAnimation 事件在每个帧之前触发,但在渲染后。deltaTimeSim 参数表示从上一帧开始过的时间。

此事件有助于修改动画对象,例如调整其速度或优先级。 一旦 PreAnimation 事件完成,引擎会继续运行这些动画,更新共同变形,以后将用于更新对象在物理模拟中。

动画完成后,引擎会触发 PreSimulation 事件。

参数

deltaTimeSim: number

从上一张框架开始过的时间(以秒为单位)。


PreRender

PreRender 事件 (相当于 RenderStepped ) 每个框架, 在框架被渲染前. deltaTimeRender 参数指示时间已过。

此事件允许您运行代码并在玩家屏幕上绘制之前更新世界。 这对于最后一分钟的调整,例如将对象位置更改、更新动画或准备视觉效果,非常有用,但您不应该使用它来节省引擎在此事件中渲染框架之前开始渲染的时间。

作为PreRender客户端,它只能在要求LocalScriptModuleScript或2>Class.Script2>的客户端中使用。 在5>Class.LocalScript5>或8>Class.ModuleScript8>中设置为

PreRender 阶段后,模拟阶段由 PreAnimation 事件开始。

参数

deltaTimeRender: number

从上一张框架开始过的时间(以秒为单位)。


PreSimulation

PreSimulation 事件 (相当于 Stepped ) 每个框架, 在物理模拟之前。 deltaTimeSim 参数表示时间过去自从上一个框架。

这个事件有助于调整速度或力等属性,直到它们被应用为部分模拟。然后,模拟器运行,直到物理解决器以更高频率运行于其他引擎系统。完成此过程后,PostSimulation 事件将发射。

参数

deltaTimeSim: number

从上一张框架开始过的时间(以秒为单位)。


RenderStepped

RenderStepped 事件 (相当于 PreRender ) 每个框架都会触发。deltaTime 参数表示时间已过从上一个框架。

此事件允许您运行代码并在玩家屏幕上绘制之前更新世界。 这对于最后一分钟的调整,例如将对象位置更改、更新动画或准备视觉效果,非常有用,但您不应该使用它来节省引擎在此事件中渲染框架之前开始渲染的时间。

作为 RenderStepped 是客户端,它只能在 LocalScript 中,在 ModuleScript 需要的 1> Class.LocalScript1> 或在 4> Class.Script4> 中使用 7>

RenderStepped 阶段后,模拟阶段由 PreAnimation 事件开始。

参数

deltaTime: number

从上一张框架开始过的时间(以秒为单位)。


Stepped

Stepped 事件 (相当于 PreSimulation ) 每个框架,在物理模拟之前。 deltaTime 参数表示时间已过。

这个事件有助于调整速度或力等属性,直到它们被应用为部分模拟。然后,模拟器运行,直到物理解决器以更高频率运行于其他引擎系统。完成此过程后,PostSimulation 事件将发射。

参数

time: number

Class.RunService 的持续时间(以秒为单位)。

deltaTime: number

从上一张框架开始过的时间(以秒为单位)。