요약
메서드
BindToRenderStep(name: string,priority: number,function: function):() |
BindToSimulation(function: function,frequency: Enum.StepFrequency,priority: number):RBXScriptConnection |
GetPredictionStatus(context: Instance):Enum.PredictionStatus |
Pause():() |
Reset():() |
Run():() |
SetPredictionMode(context: Instance,mode: Enum.PredictionMode):() |
Stop():() |
UnbindFromRenderStep(name: string):() |
이벤트
Heartbeat(deltaTime: number):RBXScriptSignal |
Misprediction(time: number,instances: {any},stats: Dictionary):RBXScriptSignal |
PostSimulation(deltaTimeSim: number):RBXScriptSignal |
PreAnimation(deltaTimeSim: number):RBXScriptSignal |
PreRender(deltaTimeRender: number):RBXScriptSignal |
PreSimulation(deltaTimeSim: number):RBXScriptSignal |
RenderStepped(deltaTime: number):RBXScriptSignal |
Rollback(time: number):RBXScriptSignal |
Stepped(time: number,deltaTime: number):RBXScriptSignal |
상속된 멤버
API 참조
속성
메서드
BindToRenderStep
반환
()
코드 샘플
원 안에서 이동하는 프레임
local RunService = game:GetService("RunService")
-- 프레임이 이동해야 하는 속도
local SPEED = 2
local frame = script.Parent
frame.AnchorPoint = Vector2.new(0.5, 0.5)
-- 원의 간단한 매개변수 방정식
-- 중심이 (0.5, 0.5)이고 반지름이 (0.5)인 원
local function circle(t)
return 0.5 + math.cos(t) * 0.5, 0.5 + math.sin(t) * 0.5
end
-- 현재 시간을 추적합니다
local currentTime = 0
local function onRenderStep(deltaTime)
-- 현재 시간을 업데이트합니다
currentTime = currentTime + deltaTime * SPEED
-- ...그리고 프레임의 위치를 업데이트합니다
local x, y = circle(currentTime)
frame.Position = UDim2.new(x, 0, y, 0)
end
-- 이것은 단지 시각적 효과이므로 "Last" 우선 순위를 사용합니다
RunService:BindToRenderStep("FrameCircle", Enum.RenderPriority.Last.Value, onRenderStep)
--RunService.RenderStepped:Connect(onRenderStep) -- 이것도 작동하지만 권장되지 않습니다RunService 사용자 정의 함수
local RunService = game:GetService("RunService")
local function checkDelta(deltaTime)
print("마지막 렌더 단계 이후 경과 시간:", deltaTime)
end
RunService:BindToRenderStep("Check delta", Enum.RenderPriority.First.Value, checkDelta)함수를 바인딩하고 언바인딩하기
local RunService = game:GetService("RunService")
-- 1단계: 함수와 이름 선언
local NAME = "Print Hello"
local function printHello()
print("안녕하세요")
end
-- 2단계: 함수 바인딩
RunService:BindToRenderStep(NAME, Enum.RenderPriority.First.Value, printHello)
-- 3단계: 함수 언바인딩
RunService:UnbindFromRenderStep(NAME)BindToSimulation
RunService:BindToSimulation(
매개 변수
| 기본값: "Hz30" |
| 기본값: 2000 |
코드 샘플
부품의 색상 속성 동기화
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local somePart:BasePart = Workspace:WaitForChild("Part")
RunService:BindToSimulation(function(deltaTime: number)
-- 색상을 동기화합니다.
local syncdColor = Color3.fromHSV(math.fmod(time(), 1.0), 1.0, 1.0)
somePart:SetAttribute("SyncdColor", syncdColor)
end)
RunService.RenderStepped:Connect(function(deltaTime: number)
-- 동기화된 색상을 설정합니다.
local syncdColor = somePart:GetAttribute("SyncdColor")
somePart.Color = syncdColor
end)GetPredictionStatus
매개 변수
Pause
RunService:Pause():()
반환
()
Reset
Run
RunService:Run():()
반환
()
SetPredictionMode
매개 변수
반환
()
Stop
RunService:Stop():()
반환
()
이벤트
Misprediction
매개 변수
코드 샘플
오차 예측
local RunService = game:GetService("RunService")
RunService.Misprediction:Connect(function(time, instances, stats)
print(`t={time}에서의 오차 예측, 재시뮬레이션 시간={stats.ResimulationTime}s`)
for _, entry in instances do
print(` 인스턴스: {entry.Instance:GetFullName()}`)
if entry.Properties then
for name, values in entry.Properties do
print(` 속성 '{name}': 예측됨={values.Predicted}, 권위 있는={values.Authoritative}`)
end
end
if entry.Attributes then
for name, values in entry.Attributes do
print(` 속성 '{name}': 예측됨={values.Predicted}, 권위 있는={values.Authoritative}`)
end
end
end
end)PostSimulation
Rollback
매개 변수
코드 샘플
롤백
local RunService = game:GetService("RunService")
local stateHistory = {} -- 고정 단계별로 추적되는 사용자 정의 상태
RunService.Rollback:Connect(function(time)
-- 롤백된 단계보다 최신의 사용자 정의 상태를 폐기합니다.
-- 그리고 재시뮬레이션이 시작되기 전에 그 단계의 상태를 복원합니다.
for step, _ in stateHistory do
if step > time then
stateHistory[step] = nil
end
end
end)Stepped