여러 조건

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

제어 구조는 여러 조건을 가질 수 있습니다. elseelseif 키워드는 여러 조건에서 어떤 일이 발생해야 하는지에 대한 추가 시나리오를 생성할 수 있습니다. 구문은 다음과 같습니다:

elseif와 else의 구문을 보여줍니다
if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

이 프로젝트에서는 elseelseif를 사용하여 주자가 완주 시간에 따라 상을 받는 파쿠르 코스를 코딩합니다.

여러 조건 코드 작성

이 프로젝트에서는 각 메달을 수여하기 위해 고유한 if 문을 작성할 수 있지만, 이는 많은 시간을 소모합니다. 예를 들어, 아래의 가상의 코드를 보세요.

모든 if 문
if finishTime < 5 then
-- 금메달을 받습니다
end
if finishTime >= 5 and <= 10 then
-- 은메달을 받습니다
end
if 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 문이 실행되면, 맨 위에서 시작하여 찾은 첫 번째 참 조건에 대한 코드만 실행됩니다.

경주 코스 설정

코스의 시작점과 결승선을 배치한 후, 플레이어의 시간을 측정하고 다양한 메달을 수여하는 스크립트를 만듭니다.

  1. FinishLine이라는 이름의 고정된 파트를 만듭니다. 테스트를 더 빠르게 하기 위해 시작과 끝을 가깝게 배치합니다. 스크립트를 완료한 후 결승선을 이동할 수 있습니다.

    결승선 파트
    전체 코스
  2. FinishLine에 RaceManager라는 이름의 스크립트를 삽입합니다. 그런 다음, 경주가 시작된 이후 경과된 시간을 저장할 변수 하나와 FinishLine을 참조할 두 번째 변수를 추가합니다.

    local finishLine = script.Parent
    local timePassed = 0
  3. finish()라는 이름의 함수를 만듭니다.

    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. 스스로:

    • 플레이어가 파트를 터치할 때 finish()를 실행하는 partTouched()라는 함수를 코딩합니다.
    • 결승선 파트를 partTouched()에 연결합니다.
    • 아래의 예제와 비교하여 코드를 확인합니다.
    local function finish()
    print("결승선을 터치했습니다")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 플레이 테스트를 하고 결승선을 터치할 때 finish()가 호출되는지 확인합니다.

finish()가 반복되지 않도록 하기

현재, 플레이어가 결승선을 터치할 때마다 finish()가 계속 호출됩니다.

boolean을 사용하여 finish()가 한 번만 호출되도록 합니다. boolean은 true 또는 false를 저장하는 변수입니다.

  1. raceActive라는 새 변수를 만들고 true로 설정합니다.

    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- 플레이어가 결승선 파트를 터치할 때마다 실행됩니다
    local function finish()
  2. if 문에 두 번째 조건을 추가하여 finish()를 호출하기 전에 raceActive가 true인지 확인합니다.

    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. finish()가 다시 호출되지 않도록 raceActivefalse로 설정합니다.

    local function finish()
    print("결승선을 터치했습니다")
    raceActive = false
    end
  4. 게임을 플레이 테스트하여 테스트 프린트 문이 한 번만 표시되는지 확인합니다.

시간 추적하기

if 문처럼, while 루프도 실행 여부를 확인하기 위해 조건을 사용할 수 있습니다. 플레이어의 시간을 측정하기 위해 raceActive boolean이 true일 때만 실행되는 while true do 루프를 사용하여 타이머를 만듭니다.

  1. 스크립트의 맨 아래에 while raceActive == true do를 입력합니다. Enter를 눌러 자동 완성하고 end를 추가합니다.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. 플레이어의 시간을 측정하기 위해 루프에서 매초 timePassed 변수에 1을 추가합니다. 작업을 테스트하기 위해 프린트 문을 포함합니다.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. 게임을 플레이 테스트하고 Output 창에 매초가 표시되는지 확인합니다.

플레이어 메달 수여

마지막으로, if 문을 사용하여 플레이어의 성과에 따라 다른 상 메달을 수여합니다. if 문과 두 개의 elseif 문을 사용하여 플레이어의 완주 시간을 확인하고 올바른 메달을 수여합니다.

  1. 각 메달이 수여될 수 있도록 프린트 문을 사용합니다.

    local function finish()
    raceActive = false
    print("당신은 " .. timePassed .. "초에 완주했습니다")
    end
  2. 금메달을 수여하기 위해 timePassed를 원하는 완주 시간과 비교하는 if 문을 코딩합니다. 이 예제는 플레이어의 시간이 10초 이하인지 확인합니다.

    local function finish()
    raceActive = false
    print("당신은 " .. timePassed .. "초에 완주했습니다")
    if timePassed <= 10 then
    print("당신은 금메달을 받습니다!")
    end
    end
  3. 플레이 테스트를 하고 금메달이 수여될 수 있는지 확인합니다.

추가 조건 추가

이제 금메달을 테스트했으므로, elseif 키워드를 사용하여 다른 메달에 대한 조건을 코딩합니다.

  1. 은메달의 경우, elseif와 다음 원하는 시간 범위를 사용합니다. 이 예제에서는 10초 초과 20초 이하의 범위입니다.

    local function finish()
    raceActive = false
    print("당신은 " .. timePassed .. "초에 완주했습니다")
    if timePassed <= 10 then
    print("당신은 금메달을 받습니다!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("당신은 은메달을 받습니다!")
    end
    end
  2. 동메달에 대해서도 같은 패턴을 사용합니다. 아래의 예제와 함께 코드를 확인합니다.

    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("당신은 동메달을 받습니다!")
    end
    end
  3. 은메달과 동메달을 위해 플레이 테스트를 진행합니다.

문제 해결 팁

은메달과 동메달이 나타나지 않는 경우, 아래의 방법 중 하나를 시도해 보세요.

  • elseif는 조건 뒤에 then이 있어야 합니다.
  • partTouched()에서 if 문 의 두 번째 조건이 ==를 사용하고 있는지 확인합니다. 예: raceActive == true.
  • elseif가 범위 내에 있는지 확인합니다. 각 elseif 조건은 if/then 문 첫 번째 줄과 마지막 end 사이에 있어야 합니다.

else 조건 추가

플레이어가 어떤 메달도 받지 못한 경우, 다시 도전하도록 격려해야 합니다. 이 경우, 다른 조건이 모두 참이 아닐 때 실행되는 else 문을 사용하여 메시지를 표시할 수 있습니다.

  1. 마지막 elseif 아래와 end 위에 새 줄을 시작하고 else를 입력합니다. then을 추가하지 마세요. else 아래에 다시 시도하라는 프린트 문을 사용합니다.

    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
  2. else 메시지를 확인하기 위해 플레이 테스트를 진행합니다.

요약

제어 구조는 여러 시나리오를 가질 수 있습니다. 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
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.