이 프로젝트는 for 루프를 실용적으로 사용하는 또 다른 예입니다. 이 다리에서는 플레이어가 버튼을 눌러 제한된 시간 동안 다리를 걸을 수 있게 하고, 그 후 다리가 사라집니다. 타이머를 만들고 남은 시간을 플레이어에게 보여주기 위해 for 루프를 사용할 것입니다.
프로젝트 설정
이 다리는 오비와 같은 움직임 기반 도전 과제가 있는 모든 Roblox 프로젝트에 포함될 수 있습니다.
부품 만들기
다리를 만들 장소를 찾습니다. 예를 들어 강이나 오비의 큰 간격을 선택하세요. 아래와 같이 세 개의 고정된 부품을 만듭니다.
- TimerDisplay
- Bridge
- ButtonBridge

비활성 상태일 때 다리는 반투명하게 보입니다. 이를 위해 Bridge를 선택하고 속성을 변경합니다.
- 투명도 = 0.8
- 충돌 가능 = 거짓
타이머 디스플레이 만들기
플레이어가 다리를 건널 때, 다리가 사라지기 전 남은 초를 볼 수 있어야 합니다. 이미지를 표시하거나 텍스트를 표시하는 한 가지 방법은 부품에 Surface GUI라는 객체를 추가하는 것입니다. Surface GUI는 게임 내 표지판, 사용자 정의 건강 바 및 인벤토리 시스템을 만드는 데에도 사용될 수 있습니다. 이 튜토리얼에서는 이를 간단히 설명하지만, 더 많은 정보는 튜토리얼 섹션에서 찾을 수 있습니다.
TimerDisplay를 선택하고 SurfaceGui를 추가합니다. 그런 다음 Surface Gui에 TextLabel을 추가합니다.

Surface GUI를 선택합니다. 속성에서 다음과 같이 변경합니다:
- Face를 변경하여 플레이어가 보는 타이머의 앞면에 텍스트 레이블이 보이도록 합니다.
TextLabel을 선택합니다. 속성에서 다음과 같이 변경합니다:
- 크기를 {1, 0},{1, 0}으로 설정합니다.
- 텍스트 크기 조정을 true로 설정합니다.
- 텍스트를 비워 둡니다. 텍스트는 스크립트를 사용하여 업데이트됩니다.
스크립트 설정
이제 타이머가 설정되었으므로, 다리를 제어하고 플레이어에게 카운트다운 숫자를 표시하는 스크립트를 만듭니다.
Bridge 부품에 TimedBridge라는 새 스크립트를 추가합니다. 그 스크립트에서 다음 변수를 만듭니다.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 다리가 견고하게 유지되는 시간local timerDuration = 5
터치 상호작용 코드 작성
다리를 사용하려면 두 개의 함수를 만들어야 합니다. 하나의 함수는 다리를 걸을 수 있게 하고 타이머를 표시합니다. 다른 함수는 플레이어가 다리를 활성화하는 버튼을 터치했는지 확인합니다.
startTimer()라는 새 함수를 만들고 그 안에 print 문을 추가합니다. print 문을 사용하여 코드를 테스트할 것입니다.
local timerDuration = 5local function startTimer()print("카운트다운 시작됨")endbuttonPressed()라는 함수를 코딩하여 휴머노이드가 버튼을 터치했는지 확인합니다. 이 함수는 partTouched라는 매개변수를 받아야 하며, 해당 부품에서 휴머노이드가 감지되면 빈 if 문을 추가합니다.
local function startTimer()print("카운트다운 시작됨")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendend타이머를 시작하기 위해 if 문 안에서 startTimer() 함수를 호출합니다.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbuttonPressed()의 끝 부분 아래에 버튼의 Touched 이벤트에 buttonPressed() 함수를 연결합니다.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)프로젝트를 실행합니다. 부품을 터치하고 출력 창에서 print 문을 확인합니다.
문제 해결 팁
이 시점에서 다리가 의도한 대로 작동하지 않으면 아래의 방법 중 하나를 시도해 보세요.
문제: "...는 workspace의 유효한 멤버가 아닙니다"라는 오류 메시지.
- TimedBridge 스크립트에서 모든 부품의 철자가 Explorer에서 보이는 것과 정확히 일치하는지 확인합니다.
문제: 부품이 보이지 않음.
- 세 개의 부품이 모두 고정되어 있는지 확인합니다.
- 다리의 투명도 속성을 확인합니다.
타이머 만들기
플레이어가 다리를 밟을 때마다 startTimer()는 다리를 걸을 수 있게 하고 타이머를 시작합니다. 타이머가 0에 도달하면 다리는 걸을 수 없게 되어, 충분히 빠르지 않은 사람은 떨어지게 됩니다.
다리를 걸을 수 있게 만들기
시작하려면 스크립트가 다리를 견고하게 만들고, 충돌 가능하게 한 다음, 다리가 걸을 수 없게 될 때까지 타이머를 시작해야 합니다.
다리를 걸을 수 있게 하려면 startTimer()에서 다리의 투명도 속성을 0(불투명)으로 변경하고 CanCollide 속성을 true로 설정합니다.
local function startTimer()-- 다리를 보이게 하고 걸을 수 있게 만듭니다bridge.Transparency = 0bridge.CanCollide = trueend카운트다운하는 타이머를 만들기 위해 다음 값을 가진 for 루프를 만듭니다.
- 제어 변수: count라는 이름으로, timerDuration으로 설정합니다.
- 끝: 0
- 증가: -1
local function startTimer()-- 다리를 보이게 하고 걸을 수 있게 만듭니다bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendend플레이어에게 타이머를 보여주기 위해 timerText의 텍스트를 count로 변경합니다. for 루프가 반복될 때마다 플레이어에게 타이머의 다음 숫자를 보여줍니다.
for count = timerDuration, 0, -1 dotimerText.Text = countendtask.wait 함수를 사용하여 for 루프가 1초마다 한 번만 실행되도록 합니다.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end게임을 실행합니다. 버튼을 터치하면 다리가 나타나고 타이머가 시작되어 완료됩니다.
다리가 다시 시작되지 않도록 하기
하지만 버튼 위에서 움직이면 타이머가 계속 재시작된다는 점에 유의하세요.
이는 버튼을 터치할 때마다 for 루프가 호출되어 처음부터 다시 시작되기 때문입니다. 타이머가 계속 재시작되지 않도록 하려면, startTimer()가 다시 호출될 수 있는지 여부를 제어하는 불리언 변수를 추가해야 합니다.
불리언은 다른 변수와 같은 방식으로 작성되지만, 숫자나 문자열 대신 true 또는 false로만 설정할 수 있습니다. 이 상황에서는 스크립트가 타이머가 현재 실행 중인지 확인하기 위해 불리언을 사용할 것입니다.
스크립트의 맨 위, 변수 아래에 timerActive라는 변수를 만들고 false로 설정합니다. 아직 아무도 버튼을 누르지 않았기 때문입니다.
local timerDuration = 5local timerActive = falselocal function startTimer()타이머가 timerActive 불리언이 false일 때만 시작되도록, buttonPressed()의 if 문에 두 번째 조건을 추가합니다.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endend타이머가 다 소모되기 전에 startTimer()가 다시 실행되지 않도록, 불리언 timerActive를 true로 설정합니다.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = truestartTimer() 함수에서 for 루프 후에 다리를 원래 속성으로 되돌리기 위해 다리의 투명도를 0.8로 변경하고 CanCollide를 false로 설정합니다.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- timerDuration에서 카운트다운하는 for 루프for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- 다리를 걸을 수 없게 만듭니다bridge.Transparency = 0.8bridge.CanCollide = falseend다리를 리셋하기 위해 마지막으로 timerText를 원래처럼 빈 문자열로 변경합니다. 그런 다음 timerActive 불리언을 false로 설정합니다.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = false플레이 테스트를 하고 다리를 여러 번 사용할 수 있는지 확인합니다.
완전한 타이머가 있는 다리 스크립트
local bridge = script.Parent
-- Explorer에서 입력된 대로 버튼을 가져옵니다
local button = workspace.ButtonBridge
-- 디스플레이를 위한 부품을 가져옵니다
local timerPart = workspace.TimerDisplay
-- 타이머를 표시할 텍스트를 가져옵니다
local timerText = timerPart.SurfaceGui.TextLabel
-- 플레이어가 다리를 건너야 하는 시간
local timerDuration = 5
local timerActive = false
local function startTimer()
print("카운트다운 시작됨")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- timerDuration에서 카운트다운하는 for 루프
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- 다리를 걸을 수 없게 만듭니다
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("부품이 터치됨")
if humanoid and timerActive == false then
print("타이머 시작")
startTimer()
end
end
button.Touched:Connect(buttonPressed)요약
루프는 다양한 상호작용 수단과 결합되어 재미있는 게임 플레이 순간을 만들 수 있습니다. 이 튜토리얼에서는 카운트다운 기능을 하는 for 루프를 사용하여 타이머가 있는 다리를 만들었습니다. 카운트다운 동안 플레이어는 다리를 건너기 위한 제한된 시간을 부여받습니다.