시작하기
중급 튜토리얼

사라지는 함정

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

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

설정

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

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

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

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

  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초마다 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가 참이기 때문입니다. 디바운스 루틴을 완료하려면 변의 값을 두 곳에서 전환해야 합니다.

  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'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.