In 치명적인 용암 에서, 사용자 행동에 따라 코드를 트리거하는 방법을 배웠습니다. 이 튜토리얼은 사용자가 플랫폼을 밟을 때 사라지는 플랫폼을 만드는 방법을 보여줍니다.
설정
Deadly Lava를 따라 플랫폼을 용암 층 위에 배치하면 사용자가 점프할 수 없는 층을 뛰어넘을 수 있습니다.
부품을 삽입하고 세계에 배치하십시오. 이름을 지정합니다 FadingPlatform .
사용자가 점프할 수 있도록 크기를 조정합니다.
앵커가 되는지 확인하십시오. Anchored .
스크립트를 부품에 삽입하고, FadeOnTouch로 이름을 변경하고 기본 코드를 제거합니다.
플랫폼에 대한 변수를 만들고 플랫폼의 Touched 이벤트에 연결된 빈 함수를 만듭니다.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
플랫폼 사라지기
즉시 플랫폼이 사라지면 사용자가 격차를 건너뛰기 어렵다고 생각할 것이므로 재미가 없을 것입니다. 대신 플랫폼은 사용자가 뛰어떨어지기 전에 사라지게 해야 합니다.
이 효과를 얻기 위해 속성 Transparency 를 변경하고 매우 짧은 시간을 반복하여 이 효과를 얻을 수 있지만, 부드러운 슬라이드는 최소 10 개의 변경 사항을 필요로 합니다. 이는 20 줄의 매우 반복적인 코드입니다.
이 작업을 더 효과적으로 수행하려면 for 루프를 사용하여 코드를 특정 번호의 반복을 반복하십시오. 각 반복 의 코드는 반복이라는 이름을 가집니다. 1>for1> 루프는 세 가지로 구분됩니다.
- 변수 제어 - 루프를 계산하는 변수입니다. 이 예에서는 count이며 시작 값은 1입니다.
- 루프를 중지하는 값을 반환합니다. - 루프를 중지하는 값입니다. 이 예에서는 10입니다.
- 단계 증가 (옵션) - 각 루프에 대해 컨트롤 변수에 추가할 항목을 결정합니다. 왼쪽으로 나가면 1을 기본값으로 유지되므로 이 예에서는 필요하지 않습니다.
In FadeOnTouch :
함수에서, for 루프를 만들어 1 부터 시작하여 10 번 반복합니다.
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 후 루프 반복 후에 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 이벤트 runs each time a user's body part comes into contact with the part. This behavior causes issues when a user runs across the fading 플랫폼: the function will run multiple times, resetting the loop each time.
코드가 올바르게 작동하려면 함수는 사용자가 플랫폼을 처음 만질 때만 실행해야 합니다. 이렇게 하면 다음과 같은 작업이 여러 번 트리거되는 것을 방지하여 리바운딩 이라고 합니다.
함수를 다시 작동하려면 Boolean 변수를 사용하여 플랫폼이 이미 만져졌는지 여부를 추적할 수 있습니다. Booleans은 진실 및 거짓 값만 포함할 수 있습니다. 변수를 만들고 2> isTouched2>라는 이름을 설정하
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 반바운스 변수가 거짓인 경우에만 횟수를 계산하여 슬라이드 함수에서만 코드를 실행할 수 있습니다. if 조건으로 not isTouched 반바운스 변수를 묶는 1> if1> 문을 작성합니다.
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)
Lua not 연산자는 다음에 나오는 값을 반환합니다. 조건부 약관, 첫 번째 if 문은 다음 문과 동일하게 작동합니다.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
리바운스 전환
현재 fade 함수에 있는 코드는 항상 실행되므로 isTouched 가 거짓이고 not isTouched 가 진실인 경우 변수의 값을 두 곳에서 전환해야 합니다. 반바운스 루틴을 완료하려면 변수의 값을 두 곳에서 전환해야 합니다.
- 플랫폼이 시작되기 전에 플랫폼 내의 isTouched를 true로 설정합니다.
- 플랫폼이 다시 나타난 후 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)