Crear peligros para jugadores

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Los objetos peligrosos disminuyen la salud de los jugadores cuando los tocan.Como punto de partida simple, esta sección del tutorial te enseña cómo crear una gran parte invisible en el mismo nivel que el agua en tu experiencia, para que caer en el peligro cambie la salud del jugador a cero y los reaparezca de nuevo al comienzo de la experiencia.

Crear un peligro de agua básico

Para crear el peligro de agua básico:

  1. En la ventana Explorador , agregue una nueva carpeta en la carpeta Mundo , luego renómbiela Peligros .Asegúrate de que el nombre se escriba correctamente con la casación correcta, de lo contrario, el código no funcionará.

  2. En la carpeta Peligros , inserta una parte de bloque y renombrala Peligro .

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Mueva y escalone la pieza para cubrir la línea de agua alrededor de la isla y las plataformas.Por ejemplo, el conjunto de experiencias de muestra Salto de isla - Programación establece Tamaño a 825, 1, 576 y CFrame.Position a 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. Seleccione la parte, luego en la ventana Propiedades , configure las siguientes propiedades para que el peligro sea invisible y los jugadores puedan pasar a través de él:

    • Establece Transparencia a 1. Esto hace que el peligro sea invisible, por lo que el agua real parece ser el peligro.
    • Desactivar CanCollide .Esto le dice al motor que otras partes pueden pasar por el peligro sin interrupción, lo que significa que los jugadores pueden caer por el peligro.
    • Habilitar Anclado .Esto le dice al motor que nunca cambie la posición del peligro debido a cualquier simulación relacionada con la física, lo que significa que los jugadores pueden tocar el peligro sin afectar su ubicación.
  5. Crea un script en ServerScriptService , luego renómlalo a HazardService .

  6. Reemplazar el código predeterminado con el siguiente 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

    El Servicio de peligro tiene muchas similitudes con Servicio de moneda .Sin embargo, en lugar de recolectar una moneda, el jugador tiene su salud establecida en 0 cuando toca un peligro.

    Siéntase libre de modificar, añadiro eliminar objetos peligrosos en su experiencia para crear obstáculos únicos.Siempre que estén contenidos en la carpeta Amenazas , el bucle de código conecta el manejador de eventos a todas tus amenazas.

Conectarse al ciclo de vida del jugador

El ciclo de vida del jugador representa eventos que ocurren cuando los jugadores interactúan en tu experiencia, como unirse, salir o reaparecer.Necesitas conectar manejadores a estos eventos para ejecutar adecuadamente la lógica para cada evento de ciclo de vida importante.En el script CoinService , copia y pega el siguiente código en la parte inferior del script:


local function onPlayerAdded(player)
-- Restablecer las monedas del jugador a 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild detendría el bucle del jugador, por lo que a continuación debería hacerse en un subprocesoseparado
task.spawn(function()
-- Cuando un jugador muere
character:WaitForChild("Humanoid").Died:Connect(function()
-- Restablecer las monedas del jugador a 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicializa cualquier jugador agregado antes de conectarse al 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)

El código define funciones para restablecer los contadores de monedas durante los eventos de ciclo de vida apropiados:

  • Player.PlayerAdded incendios cuando un jugador se une a la experiencia y establece el recuento de monedas en 0.
  • Player.CharacterAdded incendios cuando se agrega el modelo de personaje de un jugador al mundo. Ocurre después de PlayerAdded y cada vez que el jugador reaparece.
  • Humanoid.Died incendios cuando un jugador muere, y establece el recuento de monedas en 0 . task.spawn() crea un hilo separado para manejar esto, por lo que otros aspectos del ciclo de vida del jugador pueden ejecutarse.
  • Player.PlayerRemoved incendios cuando un jugador abandona la experiencia para limpiar el estado del jugador.
  • Este código contiene un problema potencial donde los jugadores podrían recolectar monedas antes de que se ejecute el evento Players.PlayerAdded y luego tener sus contados de monedas restablecidos a cero.Para mitigar este problema, considera soluciones como la programación de código o el congelamiento del personaje del jugador hasta que termine la inicialización.Sin embargo, estas soluciones implican conceptos de programación más complejos que están más allá del alcance de este tutorial.

Prueba de juego

Es hora de ver si el peligro del jugador funciona como se esperaba. Cuando toques el agua, tu personaje debería morir y perder sus monedas. Para probar tu juego:

  1. En la barra de herramientas, haz clic en el botón Jugar . Studio entra en modo de prueba de juego.

    Play button highlighted in Studio's playtesting options.
  2. Mueve tu personaje para recoger algunas monedas, luego salta al agua.Si tus scripts funcionan correctamente, tu personaje muere y el recuento de monedas en la tabla de clasificación se restablece a 0 .