RunService

RunService 可以用于动画。它还允许处理实时更新和逐帧控制。

事件详情
Heartbeat每帧在物理模拟完成后触发。
PostSimulation每帧在物理模拟完成后触发。
PreAnimation每帧在物理模拟之前但在渲染之后触发。
PreRender每帧在渲染之前触发。
PreSimulation每帧在物理模拟之前触发。
RenderStepped每帧在渲染之前触发。
Stepped每帧在物理模拟之前触发。

RunService 与 wait()

local part = Instance.new("Part")
part.Size = Vector3.new(4, 4, 4)
part.Position = Vector3.new(0, 5, 0)
part.Anchored = true
part.Parent = workspace

local speed = 5 -- studs per second

spawn(function()
    while true do
        wait(0.033) -- Approximate wait time for 30 FPS (Frame per second)
        part.Position = part.Position + Vector3.new(speed * 0.033, 0, 0)
    end
end)
wait() 的精确度较低,时间可能会有所波动,导致动画不太流畅。

RunService 与 TweenService

  • 适用于平滑、可预测的动画。
  • 最佳用于简单的属性过渡。
  • 内置的缓动样式使用方便。
  • TweenService 利用类似 RunService 的机制来确保动画平滑,包括使用 delta time 进行属性的帧独立插值。
  • 适用于实时动态更新。
  • 允许逐帧控制。
  • 可用于动画之外的各种任务。
  • RenderStepped 与渲染过程相关联,该过程在客户端发生,因此仅限于 LocalScripts。

RunService 使用案例示例

示例详情
Custom Render Logic3D GUIs: 创建并更新必须跟随游戏世界中的部件或角色的 3D GUI 元素。
Player-Exclusive Features本地游戏机制:实现仅影响本地玩家的功能或机制,例如本地独有的粒子效果或照明变化。
Camera Manipulation动态相机控制:根据玩家操作或游戏事件平滑地更新相机的位置、方向或焦点,以创建更具沉浸感的体验。

如果您觉得本教程对您有帮助,并且愿意支持我的工作,请考虑请我喝杯咖啡。

非常感谢您的支持!

请我喝咖啡