Neste momento, os jogadores podem cair de qualquer plataforma sem consequências. Esta seção orienta você na criação de um grande perigo invisível na mesma altura que a água do seu jogo. Quando um jogador cai no perigo, sua saúde é reduzida a zero e ele renasce no início do jogo.
Criar um perigo básico de água
Criar um perigo básico de águaEm Workspace > World, crie uma nova pasta chamada Hazards.Dentro da pasta Hazards, crie um bloco Part chamado Hazard com o tamanho 825, 1, 576 e CFrame.Position 174, -6.5, 38 para que a parte cubra a água ao redor da ilha e das plataformas.Defina a Transparência como 1 para que a parte seja invisível e a água real apareça como o perigo, desative CanCollide para que os jogadores possam cair através dela na água e ative Anchored para que a física não a mova.
Detectar quando jogadores tocam o perigo
O perigo não faz nada até que você escreva um script que ouça Touched e reduza a saúde do jogador a zero.
Criar HazardServiceEm ServerScriptService, crie um Script chamado HazardService com o seguinte código:```lualocal Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)end```
O HazardService tem muitas semelhanças com o CoinService. No entanto, em vez de coletar uma moeda, a saúde do jogador é definida como 0 quando tocam em um perigo.
Sinta-se à vontade para modificar, adicionar ou remover objetos de perigo em seu jogo para criar obstáculos exclusivos. Desde que estejam contidos na pasta Hazards, o loop do código conecta o manipulador de eventos a todos os seus perigos.
Conectar ao ciclo de vida do jogador
O ciclo de vida do jogador representa eventos que ocorrem quando os jogadores interagem em seu jogo, como entrar, sair ou renascer. Você precisa conectar manipuladores a esses eventos para executar a lógica para cada evento principal do ciclo de vida.
Adicionar manipuladores de ciclo de vida ao CoinServiceEm ServerScriptService, anexe o seguinte código ao final do Script CoinService existente (não substitua nenhum dos códigos existentes — adicione isso depois):```lualocal function onPlayerAdded(player)-- Redefinir moedas do jogador para 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild pararia o loop do jogador, então o abaixo deve ser feito em uma thread separadatask.spawn(function()-- Quando um jogador morrecharacter:WaitForChild("Humanoid").Died:Connect(function()-- Redefinir moedas do jogador para 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Inicializa quaisquer jogadores adicionados antes de conectar ao evento PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
O código define funções para redefinir contagens de moedas durante os eventos de ciclo de vida apropriados:
- Players.PlayerAdded é acionado quando um jogador entra no jogo e define a contagem de moedas como 0.
- Player.CharacterAdded é acionado quando o modelo de personagem de um jogador é adicionado ao mundo. Isso ocorre após PlayerAdded e sempre que o jogador renasce.
- Humanoid.Died é acionado quando um jogador morre e define a contagem de moedas como 0. task.spawn() cria uma thread separada para lidar com isso, para que outros aspectos do ciclo de vida do jogador possam ser executados.
- Player.PlayerRemoved é acionado quando um jogador sai do jogo para limpar o estado do jogador.
- Este código contém um problema potencial em que os jogadores poderiam coletar moedas antes que o evento Players.PlayerAdded seja executado e, em seguida, ter suas contagens de moedas redefinidas para zero. Para mitigar esse problema, considere soluções como agendamento de código ou congelar o personagem do jogador até que a inicialização termine. No entanto, essas soluções envolvem conceitos de script mais complexos que estão além do escopo deste tutorial.
Testar
Selecione Testar no menu suspenso e clique em Jogar. Colete algumas moedas e depois pule na água. Seu personagem deve morrer e renascer no início, com a contagem de moedas redefinida para 0.