제어 구조는 여러 조건을 가질 수 있습니다. 키워드 else와 elseif는 여러 조건 하에서 발생해야 할 추가 시나리오를 생성할 수 있습니다. 구문은 다음과 같습니다:
elseif 및 else의 구문을 보여줌if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("정지")end
이 프로젝트에서는 else와 elseif를 사용하여 달리기 선수들이 완주 시간에 따라 상을 받는 파쿠르 코스를 코딩합니다.

여러 조건 코딩하기
이 프로젝트에서 각 메달에 대해 고유한 if 문을 작성할 수 있지만, 그건 많은 시간이 소요됩니다. 예를 들어, 아래의 상상 코드를 살펴보십시오.
모든 if 문if finishTime < 5 then-- 금메달을 받습니다endif finishTime >= 5 and <= 10 then-- 은메달을 받습니다endif finishTime > 10 and <= 15 then-- 동메달을 받습니다end
이것을 코딩하는 더 가독성이 높고 효율적인 방법은 하나의 if 문을 사용하고 키워드 elseif를 사용하여 이전 조건이 참이 아닐 때 테스트할 대체 조건을 제공하는 것입니다.
elseif 및 else 사용if finishTime < 5 then-- 금메달을 받습니다elseif finishTime >= 5 and <= 10 then-- 은메달을 받습니다elseif finishTime > 10 and <= 15 then-- 동메달을 받습니다end
if/then 문이 실행될 때, 가장 위에서 시작하여 찾는 첫 번째 참 조건에 대해만 코드를 실행합니다.
경주 코스 설정하기
시작 점과 결승선을 배치한 다음, 플레이어의 시간을 측정하고 다양한 메달을 수여하는 스크립트를 만듭니다.
앵커가 설정된 FinishLine이라는 부품을 생성합니다. 테스트를 빠르게 진행하도록 시작점과 결승선을 가까이에 배치하십시오. 스크립트 작성을 마친 후에는 결승선을 이동할 수 있습니다.

결승선 부품 
전체 코스 FinishLine에 RaceManager라는 스크립트를 삽입합니다. 그런 다음, 경주가 시작된 이후 경과된 시간을 저장할 변수를 하나 추가하고, 두 번째 변수로 FinishLine을 참조하도록 합니다.
local finishLine = script.Parentlocal timePassed = 0finish()라는 함수를 생성합니다.
local timePassed = 0local finishLine = script.Parentlocal function finish()end스스로:
- 플레이어가 만지면 finish()가 실행되는 partTouched()라는 함수를 코딩합니다.
- 결승선 부품을 partTouched()와 연결합니다.
- 아래의 예제와 코드를 비교합니다.
local function finish()print("결승선에 닿았습니다")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)플레이 테스트를 하고 결승선을 터치할 때 finish()가 호출되는지 확인합니다.
finish()의 반복 호출 방지
현재로서는 플레이어가 결승선에 닿을 때마다 플레이어가 부품을 터치하는 한 finish()가 계속 호출됩니다.
boolean을 사용하여 finish()가 한 번만 호출되도록 합니다. 이것은 참 또는 거짓을 저장하는 변수입니다.
raceActive라는 새 변수를 생성하고 true로 설정합니다.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- 플레이어가 결승선 부품을 터치할 때마다 실행local function finish()if 문에 두 번째 조건을 추가하여 finish()를 호출하기 전에 raceActive가 true인지 확인합니다.
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendfinish()가 다시 호출되지 않도록 raceActive를 false로 설정합니다.
local function finish()print("결승선에 닿았습니다")raceActive = falseend플레이 테스트를 통해 테스트 프린트 문이 한 번만 표시되는지 확인합니다.
시간 기록하기
if 문과 같이, while 루프도 실행되어야 할 조건을 사용할 수 있습니다. 플레이어의 시간을 재기 위해 raceActive boolean이 true일 때만 실행되는 while true do 루프를 사용하여 타이머를 만듭니다.
스크립트의 맨 아래에 while raceActive == true do를 입력합니다. Enter를 눌러 자동 완성하고 end를 추가합니다.
finishLine.Touched:Connect(partTouched)while raceActive == true doend루프 내에서 매초마다 timePassed 변수에 1을 추가하여 플레이어의 시간을 재도록 합니다. 작업을 테스트할 수 있도록 프린트 문을 포함합니다.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)end경험을 플레이 테스트하고 각 초가 Output 창에 표시되는지 확인합니다.
플레이어 메달 수여하기
마무리 단계로, 여러 조건을 가진 if 문을 사용하여 플레이어의 성과에 따라 다른 메달을 수여합니다. if 문과 두 개의 elseif 문을 사용하여 플레이어의 완주 시간을 확인하고 올바른 메달을 수여합니다.
각 메달을 수여할 수 있는지 확인하기 위해 프린트 문을 사용합니다.
local function finish()raceActive = falseprint("당신은 " .. timePassed .. "에 완주했습니다")end금메달을 수여하기 위해 timePassed를 원하는 완주 시간과 비교하는 if 문을 코딩합니다. 이 예제는 플레이어의 시간이 10초 이하인지 확인합니다.
local function finish()raceActive = falseprint("당신은 " .. timePassed .. "에 완주했습니다")if timePassed <= 10 thenprint("당신은 금메달을 받습니다!")endend플레이 테스트를 통해 금메달이 수여될 수 있는지 확인합니다.
추가 조건 추가하기
금메달에 대해 테스트하고 나면, elseif 키워드를 사용하여 다른 메달에 대한 조건을 코딩합니다.
은메달의 경우, elseif와 다음 원하는 시간 범위를 사용합니다. 이 예제에서는 10초 이상이지만 20초 이하인 범위입니다.
local function finish()raceActive = falseprint("당신은 " .. timePassed .. "에 완주했습니다")if timePassed <= 10 thenprint("당신은 금메달을 받습니다!")elseif timePassed > 10 and timePassed <= 20 thenprint("당신은 은메달을 받습니다!")endend동메달에 대해서도 같은 패턴을 사용합니다. 아래 예제와 코드를 확인합니다.
local function finish()raceActive = falseprint("당신은 " .. timePassed .. "에 완주했습니다")if timePassed <= 10 thenprint("당신은 금메달을 받습니다!")elseif timePassed > 10 and timePassed <= 20 thenprint("당신은 은메달을 받습니다!")elseif timePassed > 20 and timePassed <= 30 thenprint("당신은 동메달을 받습니다!")endend은메달 및 동메달에 대해 플레이 테스트를 진행합니다.
문제 해결 팁
은메달과 동메달이 나타나지 않는 경우 아래 안내 사항 중 하나를 시도해 보세요.
- 각 elseif 조건 뒤에는 반드시 then이 있어야 합니다.
- partTouched()에서 if 문 두 번째 조건이 ==를 사용하는지 확인합니다. 예: raceActive == true.
- 각 elseif가 범위 내에 있는지 확인합니다. 각 elseif 조건은 if/then 문 첫 번째 줄과 마지막 end 사이에 있어야 합니다.
else 조건 추가하기
플레이어가 어떤 메달도 얻지 못한 경우, 다시 도전해 보라고 격려하는 메시지를 보여줘야 합니다. 이 경우, 다른 조건이 모두 참이 아닐 때 실행되는 else 문을 사용하여 메시지를 보여줄 수 있습니다.
마지막 elseif 아래에 새 줄을 시작하고 else를 입력합니다. do not add then. else 아래에 다시 도전하라는 메시지를 출력하는 프린트 문을 사용합니다.
local function finish()raceActive = falseprint("당신은 " .. timePassed .. "에 완주했습니다")if timePassed <= 10 thenprint("당신은 금메달을 받습니다!")elseif timePassed > 10 and timePassed <= 20 thenprint("당신은 은메달을 받습니다!")elseif timePassed > 20 and timePassed <= 30 thenprint("당신은 동메달을 받습니다!")elseprint("다시 도전하세요!")endendelse 메시지를 확인하기 위해 플레이 테스트를 진행합니다.
요약
제어 구조는 여러 시나리오를 가질 수 있습니다. if 문을 사용하여 초기 확인 문을 설정하고, 그런 다음 필요한 만큼 많은 elseif 조건을 추가하십시오. 마지막으로, 모든 주어진 조건이 거짓일 경우 어떤 동작을 해야 하는지를 설명하기 위해 else를 사용합니다.
맨 위에서 시작하여 모든 조건이 확인되며, 첫 번째 참 조건만 코드가 실행됩니다. 이후의 조건은 확인되지 않으며, 그 코드도 실행되지 않습니다.
프로젝트를 마친 후에는 스크립트를 확장하여 몇 가지 방법으로 새로운 요소를 추가할 수 있습니다.
- 플레이어가 finish 시 터치하여 경주를 반복할 수 있도록 코드를 추가합니다.
- 경주 중에 시간을 표시하는 방법을 설계합니다. 플레이어는 Surface GUI를 사용하여 부품에 시간을 표시할 수 있습니다. 이는 시간 제한 브리지를 생성하는 튜토리얼에서 확인할 수 있습니다.
완료된 스크립트
local timePassed = 0
local finishLine = script.Parent
-- 경주가 끝난 후 finish()와 타이머가 반복되지 않도록 유지
local raceActive = true
-- 플레이어가 결승선에 닿으면 실행되고 상을 보여줌
local function finish()
raceActive = false
print("당신은 " .. timePassed .. "에 완주했습니다")
if timePassed <= 10 then
print("당신은 금메달을 받습니다!")
elseif timePassed > 10 and timePassed <= 20 then
print("당신은 은메달을 받습니다!")
elseif timePassed > 20 and timePassed <= 30 then
print("당신은 동메달을 받습니다!")
else
print("다시 도전하세요!")
end
end
-- 경주가 진행 중일 때 플레이어가 부품에 닿았는지 확인
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- 경주가 진행되는 동안 타이머를 유지합니다. 스크립트의 맨 아래에 있어야 합니다.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end