Objetos de perigo diminuem a saúde dos jogadores quando eles os tocam. Como um ponto de partida simples, esta seção do tutorial ensina você a criar uma grande parte invisível no mesmo nível que a água em sua experiência, para que cair no perigo mude a saúde do jogador para zero e ressurga de volta ao início da experiência.
Criar um Perigo Básico de Água
Para criar o perigo básico de água:
Na janela Explorer , adicione um novo pasta na pasta Mundo , então renomeie-o para Perigos . Certifique-se de que o nome está escrito corretamente com a casca correta, caso contrário, o código não funcionará.
Na pasta Perigos, insira uma peça bloqueada e renomeie-a para Perigo.
Mova e escala a peça para cobrir a linha de água ao redor da ilha e das plataformas. Por exemplo, a experiência de script Ilha de Pulo - Scripting define Tamanho para 825, 1, 576 e 1>CFrame.Position1> para 4>174, -6.5, 384>.
Selecione a peça, então na janela Propriedades , configure as propriedades a seguir para que o perigo seja invisível e os jogadores possam passar direto por ele:
- Definir Transparência para 1 . Isso torna o perigo invisível, para que a água real apareça ser o perigo.
- Desabilitar Colisão de Alguma Parte . Isso diz ao motor que outras peças podem passar pelo perigo sem serem afetadas, o que significa que os jogadores podem cair através do perigo.
- Habilite Anchored . Isso diz ao motor para nunca alterar a posição do perigo devido a qualquer simulação relacionada à física, o que significa que os jogadores podem tocar o perigo sem afetar sua localização.
Crie um Script em ServerScriptService, então renomeie-o para HazardService.
Substitua o código padrão com o seguinte código:
local 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)endExplica??o de C?digoO Serviço de Perigo tem muitas semelhanças com CoinService . No entanto, em vez de coletar uma moeda, o jogador tem sua saúde definida como 0 quando eles tocarem um perigo.
Sinta-se à vontade para modificar, adicionar ou remover objetos de perigo em sua experiência para criar obstáculos únicos. Desde que eles estejam contidos na pasta Hazards , o código de loop de código conecta o gerenciador de eventos ao 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 sua experiência, como entrar, sair ou respawnar. Você precisa conectar os handlers a esses eventos para executar lógica apropriadamente para cada grande evento de ciclo de vida. No script CoinService , copie e cole o seguinte código na parte inferior do script:
local function onPlayerAdded(player)
-- Redefinir as moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- O WaitForChild iria parar o ciclo do jogador, então abaixo deve ser feito em um Subprocessoseparado
task.spawn(function()
-- Quando um jogador morre
character:WaitForChild("Humanoid").Died:Connect(function()
-- Redefinir as moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicialize qualquer jogador adicionado antes de conectar-se ao evento PlayerAdded
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.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:
- Player.PlayerAdded dispara quando um jogador se juntar à experiência e definir o número de moedas para 0 .
- Player.CharacterAdded fica acesa quando o modelo de personagem de um jogador é adicionado ao mundo. Ocorre depois de PlayerAdded e sempre que o jogador respawna.
- Humanoid.Died dispara quando um jogador morre, e define o número de moedas para 0 . task.spawn() cria uma thread separada para lidar com isso, para que outros aspectos da vida do jogador possam ser executados.
- Player.PlayerRemoved dispara quando um jogador sai da experiência para limpar o estado do jogador.
- Este código contém um problema potencial onde os jogadores podem coletar moedas antes que o evento Players.PlayerAdded seja executado e, em seguida, ter seus contadores de moedas redefinidos para zero. Para mitigar este problema, considere soluções, como a programação de código ou congelar o personagem do jogador até que a inicialização termine. No entanto, essas soluções envolvem mais conceitos de script complexos que estão além do escopo deste Tutorial.
Testar Jogo
É hora de ver se o perigo do jogador funciona como deveria. Quando você toca a água, seu personagem deve morrer e perder suas moedas. Para testar seu jogo:
Na barra de menu, clique no botão Jogar . Studio entra no modo de teste de jogo.
Mova seu personagem para coletar algumas moedas e depois pule na água. Se seus scripts estiverem funcionando corretamente, seu personagem morre e o número de moedas na tabela de classificação é redefinido para 0 .