Criar perigos para o jogador

*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 os tocam.Como ponto de partida simples, esta seção do tutorial ensina você a criar uma grande parte invisível no mesmo nível da água em sua experiência, para que cair no perigo mude a saúde do jogador para zero e os respawnem de volta ao começo da experiência.

Criar um perigo de água básico

Para criar o perigo de água básico:

  1. Na janela Explorer , adicione um novo diretório ao diretório Mundo , então renomeie-o Avisos .Certifique-se de que o nome está escrito corretamente com o caso correto, caso contrário, o código não funcionará.

  2. Na pasta Avisos , insira uma parte de bloco e renomeie-a Aviso .

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Mova e escalone a peça para cobrir a linha de água ao redor da ilha e das plataformas.Por exemplo, o conjunto de experiências de exemplo Salto da Ilha - Programação define Tamanho para 825, 1, 576 e CFrame.Position para 174, -6.5, 38.

    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 seguintes propriedades para que o perigo seja invisível e os jogadores possam passar direto por ele:

    • Defina Transparência em 1. Isso torna o perigo invisível, para que a água real pareça ser o perigo.
    • Desabilite CanCollide .Isso diz ao motor que outras partes podem passar pelo perigo sem interrupção, o que significa que os jogadores podem cair pelo perigo.
    • Ativar Ancorado .Isso diz ao motor para nunca mudar 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 Serviço de Script de Servidor , então renomeie-o para Serviço de Perigo .

  6. Substitua o código padrão pelo 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 o Serviço de Moeda .No entanto, em vez de coletar uma moeda, o jogador tem sua saúde definida para 0 quando toca em um perigo.

    Sinta-se à vontade para modificar, adicionar ou remover objetos de perigo em sua experiência para criar obstáculos únicos.Desde que estejam contidos na pasta Avisos , o ciclo de código conecta o manipulador de eventos a todos os seus avisos.

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 reaparecer.Você precisa conectar manipuladores a esses eventos para executar adequadamente a lógica para cada evento de ciclo de vida importante.No script CoinService , copie e cole o seguinte código na parte inferior do script:


local function onPlayerAdded(player)
-- Redefinir moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild interromperia 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 moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicialize qualquer jogador adicionado antes de se conectar 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 fogos quando um jogador se junta à experiência e define o número de moedas para 0.
  • Player.CharacterAdded fogos quando o modelo de personagem de um jogador é adicionado ao mundo. Ocorre depois de PlayerAdded e sempre que o jogador respawna.
  • Humanoid.Died fogos quando um jogador morre e define o número de moedas para 0 .task.spawn()
  • Player.PlayerRemoved fogos quando um jogador deixa a experiência para limpar o estado do jogador.
  • Este código contém um problema potencial onde os jogadores poderiam coletar moedas antes do evento Players.PlayerAdded executar e, em seguida, ter seu número de moedas redefinido para zero.Para mitigar esse problema, considere soluções como agendamento de código ou congelamento do 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.

Teste de Jogo

É hora de ver se o perigo do jogador funciona como pretendido. Quando você toca a água, seu personagem deve morrer e perder suas moedas. Para testar seu jogo:

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

    Play button highlighted in Studio's playtesting options.
  2. Mova seu personagem para coletar algumas moedas, então 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.