In 치명적인 용암에서 사용자 행동에 따라 코드를 트리거하는 방법을 배웠습니다.이 자습서에서는 사용자가 플랫폼에 발을 디딜 때 사라지는 플랫폼을 만드는 방법을 보여줍니다.
설정
치명적인 용암을 따랐다면, 사용자가 건너뛰지 못하는 용암 층 위에 사라지는 플랫폼을 배치할 수 있습니다.
부품을 삽입하고 세계에서 그것을 위치에 이동하십시오. 이름을 FadingPlatform 입력하십시오.
사용자가 점프할 수 있도록 크기를 조정합니다.
Make sure it's 고정되었습니다 .
부품에 스크립트 를 삽입하고, 이름을 페이드 온 터치 로 변경하고, 기본 코드를 제거합니다.
플랫폼에 대한 변수와 플랫폼의 Touched 이벤트에 연결된 빈 함수를 만듭니다.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
플랫폼 페이드
플랫폼이 순간적으로 사라지면 사용자가 간격을 넘어가기 불가능하다고 생각하여 전혀 재미가 없을 것입니다.대신, 플랫폼은 사용자가 그것을 통해 떨어지기 전에 사라져야 합니다. 그렇게 하면 점프할 기회를 줄 수 있습니다.
Transparency 속성을 변경하고 매우 짧은 시간 동안 반복해서 이 효과를 얻을 수 있지만, 점진적 페이드는 0과 1 사이에서 최소 10개의 변경이 필요합니다.매우 반복적인 코드 20개 줄입니다.
이는 특정 수의 코드를 반복하는 for 루프를 사용하여 훨씬 더 효과적으로 달성할 수 있습니다.코드의 각 루프는 반복 으로 알려져 있습니다.루프 A는 쉼표로 구분된 세 가지로 정의됩니다:
- 제어 변수 - 루프를 계산하기 위해 생성되고 사용된 변수. 이 예제에서는 count이며 시작 값은 1입니다.
- 종료 값 - 루프가 중지하기 위해 얻어야 하는 값. 이 예제에서는 10입니다.
- 단계 증가 (선택사항) - 각 루프에 컨트롤 변수에 추가할 내용을 결정합니다.생략하면 기본값이 1로 설정되므로 이 예제에서는 불필요합니다.
에서 터치 시 페이드 :
함수에서 for 반복하는 시작 루프를 만들어 1 에서 시작하는 루프를 만듭니다.In the function, create a loop starting from which iterates 10 times.
for 루프 내에서 Transparency 속성을 10로 나눈 컨트롤 변수에 설정합니다.
task.wait() 함수를 시간으로 호출하십시오 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
루프가 실행되면 각 반복마다 카운트가 1씩 증가합니다.즉, 플랫폼의 Transparency가 0.1초마다 0.1씩 증가하여 1초 후 전체 투명도에 도달합니다.
재출현
플랫폼이 사라진 후에는 사용자가 그것을 통해 떨어져야 합니다.플랫폼은 사라진 후 몇 초 동안 돌아와야 합니다. 그렇지 않으면 사용자가 실패하면 결코 다시 점프를 시도하지 않을 것입니다.CanCollide 속성은 사용자가 부품을 통과할 수 있는지 여부를 제어합니다.
플랫폼의 CanCollide 루프 후에 false 합니다.
task.wait() 함수를 사용하여 몇 초 동안 기다립니다.
CanCollide 속성을 true로 다시 설정합니다.
Transparency 속성을 0로 다시 설정합니다.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
디바운스 변수
In 치명적인 용암 , you learned that the Touched 이벤트는 사용자의 신체 부분이 부품과 접촉할 때마다 실행됩니다.이 동작은 사용자가 사라지는 플랫폼을 통해 실행할 때 문제를 일으킵니다: 함수는 여러 번 실행되며, 매번 루프를 재설정합니다.
코드가 제대로 작동하려면 사용자가 플랫폼을 처음 만질 때 함수를 한 번만 실행해야 합니다.다른 경우 여러 번 트리거되는 동작이 한 번만 트리거되도록 보장하는 것을 디바운스 라고 합니다.
함수를 디바운스하려면 부울 변수를 사용하여 플랫폼이 이미 터치된 시기를 추적할 수 있습니다.부울은 true 와 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 문을 사용하여 디바운스 변수가 false인 경우에만 페이드 함수에서 코드를 실행할 수 있습니다.isTouched페이드 함수의 본문을 조건 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 thenendif isTouched == false thenendif isTouched == nil thenend
디바운스 전환
현재 fade 함수의 코드는 항상 실행되는데, isTouched 가 거짓이고 not isTouched 가 참으로 평가되기 때문입니다.디바운스 루틴을 완료하려면 변수의 값을 두 곳에서 전환해야 합니다.
- 플랫폼이 사라지기 시작하기 전에 isTouched문 내에서 true플랫폼이 사라지기 시작하기 전에 if문 내에서 설정 플랫폼이 사라지기 시작하기 전에 문 내에서 설정
- 플랫폼이 다시 나타난 후 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)