사라지는 트랩

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

치명적인 용암에서 사용자 행동에 따라 코드를 트리거하는 방법을 배웠습니다. 이 튜토리얼에서는 사용자가 밟으면 사라지는 플랫폼을 만드는 방법을 보여줍니다.

설정

치명적인 용암을 따라 했다면, 사용자가 점프할 수 없는 용암 바닥 위에 사라지는 플랫폼을 배치할 수 있습니다.

  1. 파트를 삽입하고 세계에서 제자리에 이동합니다. 이름을 FadingPlatform으로 지정합니다.

  2. 사용자가 점프할 수 있도록 크기를 조정합니다.

  3. 고정(Anchored) 되어 있는지 확인합니다.

  4. 파트에 스크립트를 삽입하고 이름을 FadeOnTouch로 변경한 후 기본 코드를 제거합니다.

  5. 플랫폼에 대한 변수를 만들고 플랫폼의 Touched 이벤트에 연결된 빈 함수를 만듭니다.

    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

플랫폼 사라지기

플랫폼이 순간적으로 사라지면 사용자가 간격을 건너는 것이 불가능하므로 전혀 재미가 없습니다. 대신, 사용자가 떨어지기 전에 플랫폼이 사라지도록 해야 합니다. 그래야 사용자가 점프할 기회를 가질 수 있습니다.

Transparency 속성을 변경하고 매우 짧은 시간 동안 반복해서 대기하는 방법으로 이 효과를 얻을 수 있지만, 점진적인 사라짐은 0과 1 사이에서 최소 10번의 변경이 필요합니다. 이는 매우 반복적인 코드로 20줄이 됩니다.

이것은 특정 횟수만큼 코드를 반복하는 for 루프를 사용하여 훨씬 더 효과적으로 달성할 수 있습니다. 코드의 각 반복을 **반복(iteration)**이라고 합니다. for 루프는 세 가지로 정의되며, 쉼표로 구분됩니다:

  • 제어 변수 - 루프를 세기 위해 생성되고 사용되는 변수입니다. 이 예제에서는 count이며 시작 값은 1입니다.
  • 종료 값 - 루프가 멈추기 위해 도달해야 하는 값입니다. 이 예제에서는 10입니다.
  • 단계 증가
    선택 사항
    - 각 루프에서 제어 변수에 추가할 값을 결정합니다. 생략하면 기본값은 1이므로 이 예제에서는 필요하지 않습니다.

FadeOnTouch에서:

  1. 함수 내에서 1부터 시작하여 10번 반복하는 for 루프를 만듭니다.

  2. for 루프 내에서 Transparency 속성을 제어 변수를 10으로 나눈 값으로 설정합니다.

  3. task.wait() 함수를 호출하여 0.1초 대기합니다.

    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

루프가 실행되면 각 반복마다 count가 1씩 증가합니다. 이는 플랫폼의 Transparency가 0.1씩 증가하여 1초 후에 완전 투명해짐을 의미합니다.

다시 나타나기

플랫폼이 사라진 후 사용자는 그 위로 떨어져야 합니다. 플랫폼은 사라진 후 몇 초 후에 다시 나타나야 합니다. 그렇지 않으면 사용자가 실패했을 때 다시 점프를 시도할 수 없게 됩니다. CanCollide 속성은 사용자가 파트를 통과할 수 있는지를 제어합니다.

  1. for 루프 후에 플랫폼의 CanCollide 속성을 false로 설정합니다.

  2. task.wait() 함수를 사용하여 몇 초 동안 대기합니다.

  3. CanCollide 속성을 다시 true로 설정합니다.

  4. Transparency 속성을 다시 0으로 설정합니다.

    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    platform.CanCollide = false
    task.wait(3)
    platform.CanCollide = true
    platform.Transparency = 0
    end
    platform.Touched:Connect(fade)

디바운스 변수

치명적인 용암에서 Touched 이벤트가 사용자의 신체 부위가 파트와 접촉할 때마다 실행된다는 것을 배웠습니다. 이 동작은 사용자가 사라지는 플랫폼을 가로질러 달릴 때 문제를 일으킵니다: 함수가 여러 번 실행되어 매번 루프를 재설정합니다.

코드가 제대로 작동하려면 사용자가 플랫폼을 처음으로 터치할 때 함수가 한 번만 실행되어야 합니다. 여러 번 트리거될 수 있는 동작이 한 번만 트리거되도록 보장하는 것을 디바운싱이라고 합니다.

함수를 디바운스하기 위해 boolean 변수를 사용하여 플랫폼이 이미 터치되었는지를 추적할 수 있습니다. Boolean은 truefalse 값만 포함할 수 있습니다. isTouched라는 변수를 만들고 false로 설정합니다.

local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)

변수 확인

if 문을 사용하여 isTouched 디바운스 변수가 false일 때만 fade 함수의 코드를 실행할 수 있습니다. fade 함수의 본문을 if 문으로 감싸고 조건을 not isTouched로 설정합니다.

local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)

Luau의 not 연산자는 그 뒤에 오는 값의 값을 반전시킵니다. 조건문으로서, 이는 첫 번째 if 문이 다음 문장들과 동일하게 작동함을 의미합니다.

if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end

디바운스 전환

현재 fade 함수의 코드는 항상 실행됩니다. 왜냐하면 isTouched가 false이고 not isTouched가 true로 평가되기 때문입니다. 디바운스 루틴을 완료하려면 두 곳에서 변수의 값을 전환해야 합니다.

  1. 플랫폼이 사라지기 시작하기 전에 if 문 안에서 isTouchedtrue로 설정합니다.
  2. 플랫폼이 다시 나타난 후 false로 되돌립니다.
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)

이제 끝났습니다! 코드를 테스트해 보세요. 사용자가 플랫폼에 점프하면 플랫폼이 사라지고 몇 초 후에 다시 나타나는 것을 확인할 수 있습니다.

이 플랫폼을 더 넓은 간격에 복제하여 도전적인 장애물을 만들고 사라지는 속도를 변경하여 난이도를 조절할 수 있습니다.

최종 코드

local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.