코드 예약

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

코드 예약은 특정 작업이나 주기가 완료된 후에 코드가 실행되도록 하거나, 특정 시간 동안 코드를 지연시키는 등의 다양한 상황에서 유용합니다. task 라이브러리를 사용하여 Roblox의 작업 스케줄러를 최적화하여 코드를 관리하고 예약할 수 있습니다. 또한, 추가 기능이 있는 coroutine이라는 유사한 라이브러리를 사용하여 코드를 예약할 수도 있습니다.

일반적인 메서드

다음은 코드를 예약하는 데 사용되는 가장 일반적인 task 메서드입니다. 코드가 최적의 조건에서 실행되도록 하기 위해서는 레거시 스케줄링 메서드인 wait()보다 작업 메서드를 사용하는 것이 좋습니다.

다음 표는 관련 레거시 글로벌 메서드와 그에 대한 선호되는 더 최적화된 대안을 나열합니다:

레거시 글로벌 메서드작업 메서드추가 대안
wait()task.wait()RunService.Heartbeat
wait(n)task.wait(n)
spawn(f)task.defer(f)task.delay(0, f)
delay(n, f)task.delay(n, f)
spawn(function() f(uv1, ...) end)task.defer(f, uv1, ...)task.delay(0, f, uv1, ...)
delay(n, function() f(uv1, ...) end)task.delay(n, f, uv1, ...)

task.spawn()

task.spawn()은 스레드 또는 함수를 받아 엔진의 스케줄러를 통해 즉시 재개합니다. 추가 인자들은 재개되는 스레드 또는 함수에 전달됩니다.

다음 코드 샘플은 객체 집합을 반복하면서 yield할 수 있는 함수를 호출할 때 task.spawn()을 사용하는 방법을 보여줍니다:


local function playerAdded(player)
print(player)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end

task.defer()

task.defer()는 스레드 또는 함수를 받아 현재 프레임 내의 현재 재개 지점 끝까지 지연시킵니다. 추가 인자들은 재개되는 스레드 또는 함수에 전달됩니다.

일반적으로 task.spawn()과 유사한 동작을 원하지만 즉시 실행되는 것에 신경 쓰지 않을 때 사용합니다. 다음 코드 샘플은 "B"에 대한 print() 문이 실행된 후 "A"에 대한 print() 문이 지연되는 방법을 보여줍니다:


task.defer(print, "A")
print("B")
--> B
--> A

task.delay()

task.delay()는 스레드 또는 함수를 받아, 다음 Heartbeat 단계에서 지정된 시간이 경과한 후 재개되도록 예약합니다. 스레드는 내장된 오류 처리 및 기타 엔진 기능을 지원하여 재개됩니다. 추가 인자들은 재개되는 스레드 또는 함수에 전달됩니다.

실제 지연 시간은 다를 수 있으므로, 다음 코드 샘플은 현재 시간을 인자로 전달하여 이를 계산하는 방법을 보여줍니다:


task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())

0의 지속 시간은 스레드 또는 함수가 다음 단계에서 재개되는 결과를 가져옵니다.

task.wait()

task.wait()는 주어진 시간(초 단위)이 경과할 때까지 현재 스레드를 yield하며, 그 후 다음 Heartbeat 단계에서 스레드를 재개합니다.

실제 yield 시간은 다를 수 있습니다. 다음 코드 샘플은 편의를 위해 이 방법이 반환하는 시간을 보여줍니다:

실제 지연 시간이 다를 수 있으므로, 다음 코드 샘플은 메서드의 반환 값을 저장하여 실제 시간을 얻는 방법을 보여줍니다:


local elapsedTime = task.wait(2) -- 2초 간 대기
print(elapsedTime) --> 2.0792941

지속 시간을 제공하지 않으면 기본 지속 시간은 0으로 설정되어 스레드가 자동으로 다음 단계에서 재개됩니다. 이는 task.wait()RunService.Heartbeat와 동등한 동작을 한다는 것을 의미합니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.