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

여러 조건 코드 작성
이 프로젝트에서는 각 메달을 수여하기 위해 고유한 if 문을 작성할 수 있지만, 이는 많은 시간을 소모합니다. 예를 들어, 아래의 가상의 코드를 보세요.
if finishTime < 5 then
-- 금메달을 받습니다
end
if finishTime >= 5 and <= 10 then
-- 은메달을 받습니다
end
if finishTime > 10 and <= 15 then
-- 동메달을 받습니다
end이것을 더 읽기 쉽고 효율적으로 코딩하는 방법은 단일 if 문을 사용하고 elseif 키워드를 사용하여 이전 조건이 참이 아닐 경우 테스트할 대체 조건을 제공하는 것입니다.
if finishTime < 5 then
-- 금메달을 받습니다
elseif finishTime >= 5 and <= 10 then
-- 은메달을 받습니다
elseif finishTime > 10 and <= 15 then
-- 동메달을 받습니다
endif/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()가 한 번만 호출되도록 합니다. boolean은 true 또는 false를 저장하는 변수입니다.
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 아래와 end 위에 새 줄을 시작하고 else를 입력합니다. 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를 사용합니다.
맨 위에서 시작하여 모든 조건이 확인되며, 첫 번째 참 조건만 코드가 실행됩니다. 나머지 조건은 확인되지 않으며, 그 코드도 실행되지 않습니다.
프로젝트를 완료한 후, 스크립트를 확장하여 몇 가지 추가 방법으로 새로운 요소를 추가할 수 있습니다.
- 플레이어가 결승선을 터치하여 경주를 반복할 수 있도록 코드를 추가합니다.
- 경주 중 시간을 표시하는 방법을 설계합니다. 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