구조체는 하나 이상의 조건을 가질 수 있습니다. 키워드 else 및 elseif 는 여러 조건에 대해 추가 시나리오를 만들 수 있습니다. 구문은 다음과 같습니다.
다른 조건에 대한 구문과 다른 구문을 보여 줍니다.
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
이 프로젝트에서는 else 및 elseif를 사용하여 러너가 완료 시간에 따라 보상을 받는 파크 코스를 코드화합니다.
여러 조건 코딩
이 프로젝트에서는 플레이어에게 수여할 메달마다 고유한 if 문을 작성할 수 있지만, 이것은 많은 시간이 소요됩니다. 예를 인스턴스, 아래의 가상 코드를 사용하십시오.
모든 if 문
if finishTime < 5 then-- 금메달 획득endif finishTime >= 5 and <= 10 then-- 은메달 획득endif finishTime > 10 and <= 15 then-- 브론즈 메달 획득end
이 코드를 읽기 쉽고 효율적인 방법은 단일 if 문을 사용하고 키워드 elseif 를 사용하여 이전 조건이 트루하지 않은 경우 대체 조건을 테스트하도록 제공하는 것입니다.
else 및 else 사용
if finishTime < 5 then-- 금메달 획득elseif finishTime >= 5 and <= 10 then-- 은메달 획득elseif finishTime > 10 and <= 15 then-- 브론즈 메달 획득end
이렇게 하면 if/then 문이 실행될 때 상위에서 시작하고 해당 코드가 발견된 첫 번째 조건에 대해서만 코드를 실행합니다.
레이스 코스 설정
코스의 시작 지점과 결승점을 배치한 다음 스크립트를 만들어 플레이어를 시간표에 맞게 다양한 메달을 수여하십시오.
FinishLine이라는 고정된 부품을 생성합니다. 테스트를 더 빠르게 하려면 시작과 끝을 가까이 두십시오. 스크립트를 완료한 후 결승선을 이동할 수 있습니다.
In FinishLine, 레이스 관리자라는 이름의 스크립트를 삽입합니다. 그런 다음 레이스가 시작된 이후 얼마나 많은 초가 지났는지 저장하는 변수를 하나 추가하고 다른 변수를 참조하여 완료 라인을 참조합니다.
local finishLine = script.Parentlocal timePassed = 0함수 이름은 finish() 입니다.
local timePassed = 0local finishLine = script.Parentlocal function finish()end보유:
- 플레이어가 터치할 때 partTouched()를 실행하는 코드 함수 finish() 을 작성합니다.
- 완성 라인 부품을 partTouched() 에 연결하십시오.
- 코드를 아래 예에 비교하십시오.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)플레이테스트 및 완료 라인을 터치할 때 finish() 이 호출되는지 확인하십시오.
끝() 반복 금지
현재, 플레이어가 결승선을 터치할 때마다, finish() 는 플레이어가 부품을 만질 때까지 연속으로 호출됩니다.
진행 상황을 저장하는 변수 Boolean 을 사용하여 Finish() 만 호출되도록 합니다.
새로운 변수 이름 raceActive 를 생성하고 true 로 설정합니다.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- 플레이어가 핀 라인 부분을 터치할 때마다 실행됩니다.local function finish()if 문에 조건을 더 추가하여 raceActive가 finish() 전에 진행되는지 확인합니다.
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("touched the finish line")raceActive = falseend게임을 플레이테스트하여 테스트 프린트 문서를 한 번만 볼 수 있는지 확인하십시오.
시간 추적
이와 마찬가지로, while 루프는 조건을 사용하여 실행할지 여부를 확인할 수도 있습니다. 플레이어를 시간표에 맞게 만들려면 raceActive 부울이 진실인 경우에만 실행할 때 타이머를 만듭니다.
스크립트 하단에서 while raceActive == true do 를 입력합니다. 엔터를 자동으로 완료하고 end 를 추가합니다.
finishLine.Touched:Connect(partTouched)while raceActive == true doend플레이어를 조정하려면, 루프에서 플레이어에게 1을 timePassed 변수에 추가합니다. 작업을 테스트하기 위해 프린트 문을 포함하십시오.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)end게임을 플레이하고 출력 창에 표시되는 각 순간을 확인하십시오.
플레이어 메달 수여
완료하려면 플레이어에게 이행따라 다른 메달을 수여하기 위해 여러 조건이 있는 if 문을 사용하십시오. if 문을 사용하고 두 개의 제외 문을 사용하여 플레이어의 완료 시간을 확인하고 올바른 메달을 수여하십시오.
각 메달을 수여할 수 있는지 여부를 확인하려면 프린트 문을 사용하십시오.
local function finish()raceActive = falseprint("You finished in " .. timePassed)end금메달을 수여하려면 timePassed 를 원하는 완료 시간과 비교하는 if 문을 작성하십시오. 이 예시에서 플레이어의 시간이 10초 미만인지 여부를 확인합니다.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endend플레이테스트 및 금메달 수여를 확인합니다.
추가 조건 추가
이제 금메달을 테스트했으므로, elseif 키워드를 사용하여 다른 메달의 코드 조건을 테스트합니다.
은메달을 위해 elseif 및 다음 원하는 시간 범위를 사용하십시오. 이 예에서 범위는 10초 이상이지만 20초 미만입니다.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endend청동 메달에 동일한 패턴을 사용합니다. 아래 예시와 함께 코드를 확인하십시오.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endend은이나 브론즈 메달을 위해 플레이테스트.
문제 해결 팁
은이나 브론즈 금속이 나타나지 않으면 아래 중 하나를 시도해 보십시오.
- 각 elseif 조건 후에는 각 이어야 합니다.
- In partTouched() , make sure the second condition of the if statement uses == , like in raceActive == true .
- 범위 내의 각 elseif 이 있는지 확인하십시오. 각 elseif 조건은 if/then 문의 첫 번째 줄과 마지막 end 줄 사이에 있어야 합니다.
엘 조건 추가
플레이어가 메달을 획득하지 못했다면, 다시 시도할 수 있도록 장려해야 합니다. 이 경우 else 조건이 true인 경우 else 문을 사용하여 메시지를 표시할 수 있습니다.
마지막 elseif 아래에 있고 위에 end 있습니다, 새 줄을 시작하고 else 를 입력합니다. 2>Do not2> 추가하면 경고를 표시합니다. 아래에 있다면 프린트 문을 사용하여 다시 시도하십시오.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2. 다른 메시지를 확인하려면 플레이테스트를 플레이하십시오.
요약
구조체는 하나 이상의 시나리오를 가질 수 있습니다. 진술을 사용하여 초기 진술을 설정한 다음 필요에 따라 많은 elseif 조건을 확인. 마지막으로 모든 조건이 잘못되면 else 을 사용하여 무슨 일이 일어나야 하는지 알려 드립니다.
위에서 시작하여 모든 조건이 확인되고 첫 번째 유효한 조건만 코드를 실행합니다. 나머지 조건은 확인되지 않으며 코드도 실행되지 않습니다.
프로젝트를 완료한 후 스크립트를 확장하여 몇 가지 추가 방법으로 새로운 요소를 추가할 수 있습니다.
- 플레이어가 완료하면 시작 라인을 터치하여 레이스를 다시 수행할 수 있도록 코드를 추가하십시오.
- 레이스 중에 시간을 표시하는 방법을 디자인하십시오. 시간을 표시하려면 표시 경계에 대해 사용자 지정 그래픽 인터페이스(Surface GUI)를 사용하여 부품에 시간을 표시하십시오. 자세한 내용은 시간 다리 생성 튜토리얼에 나와 있습니다.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- 레이스가 끝난 후에 끝나는 시간을 재정의하지 않도록 하려면 사용됩니다.
local raceActive = true
-- 플레이어가 결승선을 터치하면 실행되고 奖励를 표시합니다.
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
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