Los objetos de peligro reducen 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 al nivel del agua en tu experiencia, para que al caer en el peligro cambie la salud del jugador a cero y reaparezca en el punto de partida.
Crear un peligro de agua básico
Para crear el peligro de agua básico:
En la ventana Explorador , agregue una nueva carpeta en la carpeta Mundo , luego renombrela Peligros . Asegúrese de que el nombre se escriba correctamente con el cierre correcto, de lo contrario el código no funcionará.
En la carpeta de peligros , insértate una parte de bloque y renombrala peligro .
Mueva y escala la parte para cubrir la línea de agua alrededor de la isla y las plataformas. Por ejemplo, la experiencia de Salto de Isla - Scripting muestra Tamaño a 825, 1, 576 y 1>CFrame.Position1> a 4>174, -6.5, 384>.
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 ella:
- Establece Transparencia a 1 . Esto hace que el peligro sea invisible, para que el agua realmente sea el peligro.
- Desactivar Puede colisionar . Esto le dice al motor que otras partes pueden pasar por el peligro sin ser dañadas, lo que significa que los jugadores pueden caer a través del peligro.
- Habilita Anchored . Esto le dice al motor que nunca cambie la posición del peligro debido a ninguna simulación relacionada con la física, lo que significa que los jugadores pueden tocar el peligro sin afectar su ubicación.
Crea un Script en ServerScriptService , luego renombralo a HazardService .
Reemplace el código predeterminado con el siguiente 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)endExplicación del códigoEl Servicio de peligro tiene muchas similitudes con CoinService . Sin embargo, en lugar de recolectar una moneda, el jugador tiene su set de salud a 0 cuando toca un peligro.
Sienta libre de modificar, añadiro eliminar objetos de peligro en tu experiencia para crear obstáculos únicos. Mientras estén contenidos en la carpeta Peligros , el código de bucle de ciclo conecta el evento del objeto de peligro a todos tus peligros.
Conectar al ciclo de vida del jugador
El ciclo de vida del jugador representa los eventos que ocurren cuando los jugadores interactúan en tu experiencia, como unirse, salir o reaparecer. Debes conectar los handlers a estos eventos para ejecutar lógica apropiadamente para cada gran evento de ciclo de vida. 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 dejaría de hacer el ciclo del jugador, por lo que a continuación se debe hacer en un subproceso
task.spawn(function()
-- Cuando muere un jugador
character:WaitForChild("Humanoid").Died:Connect(function()
-- Restablecer las monedas del jugador a 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicialice 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 vida adecuados:
- Player.PlayerAdded fue activado cuando un jugador se unió a la experiencia y estableció el recuento de monedas en 0 .
- Player.CharacterAdded fue activado cuando se agregó el modelo de personaje de un jugador al mundo. Ocurre después de PlayerAdded y siempre que el jugador reaparece.
- Humanoid.Died fue activado cuando un jugador murió, y establece el recuento de monedas en 0 . task.spawn() crea un hilo separado para manejar esto, para que otros aspectos de la vida del jugador puedan ejecutarse.
- Player.PlayerRemoved fue activado cuando un jugador salió de 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 restablecer los recuentos de monedas a cero. Para mitigar este problema, considere soluciones como la programación de código o la congelación del personaje del jugador hasta que finalice la inicialización. Sin embargo, estas soluciones implican conceptos de script más complejos que están por encima del alcance de este tutorial.
Probar
Es hora de ver si el peligro del jugador funciona como se esperaba. Cuando tocas el agua, tu personaje debería morir y perder sus monedas. Para probar tu juego:
En la barra de menú, haz clic en el botón Reproducir . Studio entra en modo de prueba de juego.
Mueve tu personaje para recoger algunas monedas, luego salta en el agua. Si tus scripts están funcionando correctamente, tu personaje muere y el recuento de monedas en el marcador de clasificación se restablece a 0 .