이 프로젝트는 실용적인 방식으로 루프를 사용하는 또 다른 예입니다.이 다리의 경우 플레이어는 버튼을 터치하여 다리가 사라지기 전에 제한된 시간 동안 다리를 걸을 수 있게 만듭니다.타이머를 생성하고 플레이어에게 남은 시간을 표시하려면 루프를 사용합니다.
프로젝트 설정
이 다리는 오비와 같은 이동 기반 도전이 있는 모든 게임 프로젝트에 포함될 수 있습니다.
부품 생성
강이나 오비의 큰 간격과 같은 다리를 만들 장소를 찾으십시오. 아래와 같이 세 개의 고정된 부품을 만듭니다.
- 타이머디스플레이
- 브리지
- 버튼 브리지
비활성 상태일 때 브리지는 반투명 상태가 됩니다. 이를 위해 브리지 를 선택하고 속성을 변경하십시오.
- 투명도 = 0.8
- 충돌 가능 = false
타이머 디스플레이 생성
다리를 건너면 플레이어는 다리가 사라지기 전에 남은 시간이 얼마인지 볼 필요가 있습니다.이미지나 텍스트를 표시하는 한 가지 방법은 부품에 표면 GUI라는 개체를 추가하는 것입니다. 표면 GUI 는 게임 내 표지판, 사용자 지정 건강 바, 인벤토리 시스템을 만드는 데에도 사용할 수 있습니다.이 자습서는 이 부분을 신속하게 검토하지만, 자습서 섹션에서 자습서에 대한 자세한 정보를 찾을 수 있습니다.
타이머디스플레이를 선택하고 서피스GUI를 추가합니다. 그런 다음 서피스 구이에 텍스트 레이블을 추가합니다.
표면 GUI를 선택합니다. 속성에서 다음 변경 사항을 적용합니다:
- 플레이어가 바라보는 타이머의 앞면에 텍스트 레이블을 볼 수 있도록 얼굴 을 변경하십시오.
텍스트랩을 선택합니다. 속성에서 다음 변경 사항을 적용합니다:
- 설정 크기 를 {1, 0},{1, 0} 설정합니다.
- TextScaled 을 true로 설정합니다.
- 텍스트 를 비워서 설정합니다. 텍스트는 스크립트를 사용하여 업데이트됩니다.
스크립트 설정
이제 타이머가 플레이스브리지를 제어하고 플레이어에게 카운트다운 번호를 표시하는 스크립트를 만듭니다.
브릿지 부분에서 TimedBridge라는 새 스크립트를 추가하고, 해당 스크립트에서 다음 변수를 생성합니다.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 다리가 얼마나 오랫동안 견고하게 유지될지local timerDuration = 5
터치 상호 작용 코드화
브릿지를 사용하려면 두 가지 함수를 만들어야 합니다.하나의 함수가 다리를 보행 가능하게 만들고 타이머를 표시합니다.다른 함수는 플레이어가 브리지를 활성화하는 버튼을 터치하는지 여부를 감지합니다.
내부에 프린트 문을 사용하여 새로운 함수 startTimer() 를 만들고 코드를 테스트합니다. 프린트 문을 사용하여 코드를 테스트합니다.
local timerDuration = 5local function startTimer()print("Countdown started")endHumanoid가 버튼을 터치하는지 확인하기 위해 buttonPressed()라는 함수를 코드화합니다.함수는 partTouched 의 매개 변수를 수락해야 하고, 그 부분에서 휴머노이드가 감지되면 빈 if 문을 가져야 합니다.
local function startTimer()print("Countdown started")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()endend아래의 끝에서 buttonPressed() , 버튼의 buttonPressed() 이벤트에 Touched 함수를 연결하십시오.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)프로젝트 실행. 부품을 터치하고 출력 창에서 인쇄 문을 확인하여 인쇄 문을 확인합니다.
문제 해결 팁
이 시점에서 브리지가 의도한 대로 작동하지 않으면 다음 중 하나를 시도하십시오. 문제 : 오류 메시지가 말하는: "... is not a valid member of workspace" .
TimedBridge 스크립트에서 모든 부품이 탐색기에서 볼 수 있는 것처럼 정확하게 철자되었는지 확인하십시오. 문제 : 부품을 볼 수 없음
세 부분이 모두 고정되었는지 확인하십시오.
브리지에 대한 투명도 속성을 확인합니다.
타이머 생성
플레이어가 다리에 발을 디뎌할 때마다, startTimer() 는 다리를 보행 가능하게 만들고 타이머를 시작합니다.타이머가 0에 도달하면 브릿지가 걷기 어려워져서 충분히 빠르지 않은 사람이 낙하됩니다.
다리를 보행 가능하게 만들기
시작하려면 스크립트가 다리를 단단하게 만들거나 충돌 가능하게 만들고 걷기 불가능해질 때까지 타이머를 시작해야 합니다.
다리를 보행할 수 있도록 하려면 startTimer()에서 다리의 투명도 속성을 0(불투명)으로 변경하고 CanCollide 속성을 참으로 변경하십시오.
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 에서 텍스트를 변경하여 수를 표시하십시오 timerText.Text = count.for 루프가 반복될 때마다 플레이어에게 타이머의 다음 번호를 표시합니다.
for count = timerDuration, 0, -1 dotimerText.Text = countendfor 루프가 1초에 한 번만 실행되도록 task.wait 함수를 사용합니다.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end게임을 실행합니다. 버튼을 터치하면 브리지가 나타나고 타이머가 시작되고 완료됩니다.
브리지 재시작 방지
버튼을 주위로 이동하면 타이머가 계속 재시작되는 것을 알아두세요.
이는 버튼을 터치할 때마다 루프가 호출되고 처음부터 루프를 시작하기 때문입니다.타이머가 계속 재시작되지 않도록 하려면 startTimer()가 다시 호출될 수 있는지 여부를 제어할 변수 유형인 부울을 추가해야 합니다. 부울 은 다른 변수와 동일한 방식으로 작성되지만, 숫자나 문자열을 사용하는 대신 트루 또는 플루스로만 설정할 수 있습니다.이 상황에서 스크립트는 타이머가 현재 실행 중인지 여부를 확인하기 위해 부울을 사용합니다.
스크립트 상단에서 변수 아래에서 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 를 참으로 설정합니다.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = truestartTimer() 함수에서, 후에 포함 루프, 브릿지의 투명도를 0.8으로 변경하고 CanCollide를 false로 설정하여 브릿지를 원래 속성으로 되돌립니다.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- 타이머Duration에서 카운트다운하는 루프에 대해for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- 다리를 보행할 수 없게 만들기bridge.Transparency = 0.8bridge.CanCollide = falseend마지막으로 브리지를 재설정하려면 timerText를 원래 방식과 같이 빈 문자열로 변경하는 것입니다.그런 다음, timerActive 부울을 거짓으로 설정합니다.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = false플레이테스트를 수행하고 다중으로 브리지를 사용할 수 있는지 확인합니다.
시간 제한 브리지 스크립트 완료
local bridge = script.Parent
-- 탐색기에 입력된 버튼을 가져옵니다
local button = workspace.ButtonBridge
-- 표시에 대한 부품 가져오기
local timerPart = workspace.TimerDisplay
-- 타이머를 표시할 텍스트 가져오기
local timerText = timerPart.SurfaceGui.TextLabel
-- 플레이어가 다리를 건너기까지 걸리는 시간
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- 타이머Duration에서 카운트다운하는 루프에 대해
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("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
요약
루프는 다양한 상호 작용 수단과 결합하여 재미있는 게임플레이 순간을 만들 수 있습니다.이 자습서에서는 카운트다운 기능을 하는 for 루프를 사용하여 시간 제한 브리지를 만듭니다.카운트다운 중에 플레이어는 건너가기 위한 제한된 시간을 받습니다.