Criar Perigos para Jogadores

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.


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:

  1. 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á.

  2. Na pasta Perigos, insira uma peça bloqueada e renomeie-a para Perigo.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. 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>.

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. 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.
  5. Crie um Script em ServerScriptService, então renomeie-o para HazardService.

  6. 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.Hazards
    local hazards = hazardsFolder:GetChildren()
    local function onHazardTouched(otherPart)
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = 0
    end
    end
    end
    for _, hazard in hazards do
    hazard.Touched:Connect(onHazardTouched)
    end

    O 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:

  1. Na barra de menu, clique no botão Jogar . Studio entra no modo de teste de jogo.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. 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 .