이 프로젝트는 실용적인 방식으로 루프를 사용하는 또 다른 예입니다. 이 다리에서 플레이어는 버튼을 터치하여 다리를 한정 시간 동안 걸을 수 있게 합니다. 타이머를 만들고 남은 시간을 플레이어에게 표시하려면 루프를 사용합니다.
프로젝트 설정
이 다리는 장애물 기반 도전과 같은 이동 기반 도전을 포함하는 모든 게임 프로젝트에 포함될 수 있습니다.
부품 생성
강이나 대형 간격과 같은 곳에 다리를 건설하십시오. 아래와 같은 3개의 앵커 부품을 생성합니다.
- 타이머 표시
- 브리지
- 버튼 다리
비활성 상태일 때 다리는 반투명이 됩니다. 이를 하려면 다리 를 선택하고 속성을 변경하십시오.
- 투명도 = 0.8
- 충돌 가능 = 거짓
타이머 디스플레이 생성
교량을 건너할 때 플레이어는 교량이 사라지기 전에 남은 시간을 몇 초인지 알아야 합니다. 이미지 또는 텍스트를 표시하는 하나의 방법은 부품에 서면 GUI라는 개체를 추가하는 것입니다. 서면 GUI 는 게임 내 표지판,
TimerDisplay를 선택하고 SurfaceGui 를 추가합니다. 그런 다음 서면 Gui에 대한 상위에 있는 텍스트 레이블을 추가합니다.
표면 GUI를 선택합니다. 속성에서 다음 변경을 만드십시오:
- 플레이어가 보고 있는 타이머의 앞에 있는 텍스트 레이블을 보려면 얼굴 을 변경하십시오.
텍스트 레이블을 선택합니다. 속성에서 다음 변경을 수행합니다:
- 크기를 1, 0,1, 0로 설정합니다.
- Set TextScaled to true.
- 텍스트를 비워 두도록 텍스트 를 설정합니다. 텍스트는 스크립트를 사용하여 업데이트됩니다.
스크립트 설정
이제 타이머가 플레이스스크립트를 만들어 다리를 제어하고 플레이어에게 카운트다운 숫자를 표시하십시오.
다리 부분에 TimedBridge라는 새로운 스크립트를 추가합니다. 그 스크립트에서 다음 변수를 만듭니다.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 다리가 얼마나 오래 고정되어 있을 수 있습니까?local timerDuration = 5
터치 상호 작용 코딩
다리를 사용하려면 두 개의 함수를 만들어야 합니다. 하나의 함수는 다리를 걸을 수 있게 하고 타이머를 표시합니다. 다른 함수는 플레이어가 브리지를 활성화하는 버튼을 터치하는지 여부를 감지합니다.
print 문을 사용하여 새 함수를 생성합니다. 새 함수에 코드를 테스트하십시오.
local timerDuration = 5local function startTimer()print("Countdown started")end코드 a function named 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()endendbuttonPressed() 의 끝에, 버튼의 buttonPressed() 이벤트에 함수 Touched 를 연결합니다.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)프로젝트를 실행합니다. 부품을 터치하고 출력 창에서 인쇄 문을 확인하여 인쇄 문을 확인하십시오.
문제 해결 팁
이 시점에서 브리지가 제대로 작동하지 않으면 다음 중 하나를 시도해 보세요. 문제 : 작업 공간의 유효한 회원이 아닙니다.
In the TimedBridge script, check that all parts are spelled exactly as they're seen in the Explorer. 문제: 부품을 볼 수 없습니다.
모든 세 부분이 고정되어 있는지 확인하세요.
다리에 대한 투명도 속성을 확인하십시오.
타이머 생성
플레이어가 다리에 서면 startTimer() 는 다리를 걸을 수 있게 하고 타이머를 시작합니다. 타이머가 0이 되면 다리가 걸을 수 없게 되고, 충분히 빠르지 않은 사람은 낙하.
다리를 걷을 수 있게 하기
시작하려면 스크립트는 다리를 고정이나 충돌 가능하게 만들고 걷지 못할 때까지 타이머를 시작해야 합니다.
다리를 걸을 수 있도록 하려면, startTimer() 에서 다리의 투명도 속성을 0(opaque)로 변경하고 CanCollide 속성을 true로 변경합니다.
local function startTimer()-- 다리를 보이고 걸을 수 있게 하십시오bridge.Transparency = 0bridge.CanCollide = trueend카운트다운 타이머를 생성하려면 다음 값과 루프를 만듭니다.
- 변수 제어 : 명명된 count , timerDuration 로 설정.
- 종료 : 0
- 증가량 : -1
local function startTimer()-- 다리를 보이고 걸을 수 있게 하십시오bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendend플레이어에게 타이머를 표시하려면 timerText 에 텍스트를 변경하여 카운트를 표시하십시오. 루프가 반복될 때마다 플레이어에게 카운트를 표시합니다.
for count = timerDuration, 0, -1 dotimerText.Text = countend작업.대기 함수를 사용하여 루프 실행을 1초마다 한 번만 수행합니다.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end게임을 실행합니다. 버튼을 터치하면 다리가 나타나고 타이머가 시작되면 완료됩니다.
다시 시작하는 동안 브리지 유지
그러나 버튼을 이동하면 타이머가 다시 시작됩니다.
이는 버튼을 터치할 때마다 루프를 호출하고 루프를 시작하기 위해 처음부터 루프를 시작하기 때문입니다. 타이머를 계속 다시 시작하지 않도록 하려면 변수의 형식, 즉 startTimer() 이 호출될 수 있는지 여부를 제어하는 부울을 추가해야 합니다. Booleans 는 다른 변수와 동일하게 작성되지만 숫자나 문자열을 사용하는 대신 진실 또는 거짓으로만 설정할 수 있습니다. 이 경우 스크립트는 타이머가 시작되기 전에 진실 또는 거짓으로만 설정할 수 있습니다.
스크립트의 맨 위에 있는 변수에서 timerActive라는 변수를 만들고 아직 누구도 버튼을 누르지 않은 상태에서 false로 설정하십시오.
local timerDuration = 5local timerActive = falselocal function startTimer()timerActive 부울이 거짓이 아니도록 하려면 buttonPressed() 에 이 문장에 두 번째 조건을 추가하십시오.
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 = trueIn the startTimer() 함수, 후에 브루쉬 루프, 브리지의 투명도를 0.8로 변경하고 CanCollide를 false로 설정하여 브리지를 원래 속성으로 다시 설정합니다.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- timerDuration에서 카운트다운하는 루프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
-- 탐색기에 입력된 버튼을 가져옵니다.
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
-- timerDuration에서 카운트다운하는 루프
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)
요약
루프는 다양한 상호 작용 방식을 결합하여 재미있는 게임 플레이 순간을 만들 수 있습니다. 이 튜토리얼에서는 카운트다운이 기능하는 시간 교량을 사용하여 시간 제한을 극복하는 방법을 보여줍니다. 카운트다운 동안 플레이어는 교량을 통해 전달할 수 있는 시간이 제한됩니다.