Em Lava Mortal, você aprendeu como acionar código com base no comportamento do usuário. Este tutorial mostra como fazer uma plataforma que desaparece quando um usuário pisa nela.
Configurar
Se você seguiu Lava Mortal, pode colocar sua plataforma fading acima do chão de lava que os usuários não conseguem pular.
Insira uma parte e mova-a para o lugar em seu mundo. Nomeie-a como FadingPlatform.
Redimensione-a para que um usuário possa pular sobre ela.
Certifique-se de que está Ancorada.

Insira um Script na parte, renomeie-o para FadeOnTouch e remova o código padrão.

Crie uma variável para a plataforma e uma função vazia conectada ao evento Touched da plataforma.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Fazer a plataforma desaparecer
Fazer a plataforma desaparecer instantaneamente não seria nada divertido, pois os usuários estariam impossibilitados de atravessar a lacuna. Em vez disso, a plataforma deve desaparecer antes que os usuários caiam através dela para dar-lhes a chance de pular.
Você poderia mudar a propriedade Transparency e esperar um tempo muito curto repetidamente para obter esse efeito, mas um desvanecimento gradual exigiria pelo menos 10 mudanças entre 0 e 1. Isso equivale a 20 linhas de código muito repetitivo.
Isso pode ser alcançado de forma muito mais eficaz usando um for loop que repete o código um número específico de vezes. Cada execução do código é conhecida como uma iteração. Um loop for é definido com três coisas, separadas por vírgulas:

- Variável de controle - A variável criada e usada para contar os loops. Neste exemplo, é count, e o valor inicial é 1.
- Valor final - O valor que deve atingir para o loop parar. Neste exemplo, é 10.
- Incremento de passo (opcional) - Determina o que adicionar à variável de controle a cada loop. Se omitido, o padrão é 1, então neste exemplo não é necessário.
Em FadeOnTouch:
Na função, crie um loop for começando de 1 que itera 10 vezes.
Dentro do loop for, defina a propriedade Transparency como a variável de controle dividida por 10.
Chame a função task.wait() com um tempo de 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Quando o loop for executado, o count aumenta em 1 a cada iteração. Isso significa que a Transparency da plataforma aumentará em 0.1 a cada 0.1 segundos, alcançando total transparência após 1 segundo.
Reaparecer
Depois que a plataforma desapareceu, os usuários devem cair através dela. A plataforma também deve voltar alguns segundos após desaparecer – caso contrário, os usuários nunca teriam a chance de tentar o pulo novamente se falhassem. A propriedade CanCollide controla se os usuários podem cair através de uma parte.
Defina a propriedade CanCollide da plataforma como false após o loop for.
Espere alguns segundos usando a função task.wait().
Defina a propriedade CanCollide de volta para true.
Defina a propriedade Transparency de volta para 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)
Variável de debounce
Em Lava Mortal, você aprendeu que o evento Touched é executado toda vez que uma parte do corpo de um usuário entra em contato com a parte. Esse comportamento causa problemas quando um usuário corre pela plataforma fading: a função será executada várias vezes, reiniciando o loop a cada vez.
Para que o código funcione corretamente, a função deve ser executada apenas uma vez quando o usuário toca a plataforma pela primeira vez. Garantir que uma ação seja acionada apenas uma vez quando, de outra forma, seria acionada várias vezes é conhecido como debounce.
Para debounce uma função, uma variável boolean pode ser usada para acompanhar quando a plataforma já foi tocada. Booleans podem conter apenas valores true e false. Crie uma variável chamada isTouched e defina como 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)
Verifique a variável
Uma instrução if pode ser usada para executar o código na função fade apenas se a variável de debounce isTouched for falsa. Envolva o corpo da função fade em uma instrução if com a condição 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)
O operador not do Luau inverte o valor de qualquer coisa que o siga. Em termos condicionais, isso significa que a primeira instrução if se comporta da mesma forma que as instruções que se seguem.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Alternar o debounce
Atualmente, o código na função fade sempre será executado porque isTouched é falso e not isTouched é avaliado como verdadeiro. Para completar a rotina de debounce, você precisará alternar o valor da variável em dois lugares.
- Defina isTouched como true dentro da instrução if, antes que a plataforma comece a desaparecer.
- Defina-o de volta como false assim que a plataforma reaparecer.
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)
E é isso! Teste seu código agora, e você deve descobrir que a plataforma desaparece quando o usuário pula sobre ela e volta alguns segundos depois.
Você pode duplicar esta plataforma através de uma lacuna mais ampla para criar um obstáculo desafiador e mudar a velocidade com que elas desaparecem para equilibrar a dificuldade.
Código final
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)