Ahora mismo, los jugadores pueden caer de cualquier plataforma sin consecuencias. Esta sección te guiará a crear un gran peligro invisible a la misma altura que el agua en tu juego. Cuando un jugador cae en el peligro, su salud se reduce a cero y reaparece al comienzo del juego.
Crear un peligro básico de agua
Crear un peligro básico de aguaEn Workspace > World, crea una nueva carpeta llamada Hazards.Dentro de la carpeta Hazards, crea una parte de bloque denominada Hazard con Size 825, 1, 576 y CFrame.Position 174, -6.5, 38 para que la parte cubra el agua alrededor de la isla y las plataformas.Establece Transparency en 1 para que la parte sea invisible y el agua real parezca ser el peligro, desactiva CanCollide para que los jugadores caigan a través de ella en el agua, y habilita Anchored para que la física no lo mueva.
Detectar cuando los jugadores toquen el peligro
El peligro no hace nada hasta que escribas un script que escuche Touched y reduzca la salud del jugador a cero.
Crear HazardServiceEn ServerScriptService, crea un Script llamado HazardService con el siguiente código:```lualocal 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)end```
El HazardService tiene muchas similitudes con el CoinService. Sin embargo, en lugar de recoger una moneda, al jugador se le establece la salud en 0 cuando tocan un peligro.
Siéntete libre de modificar, añadir o eliminar objetos de peligro en tu juego para crear obstáculos únicos. Siempre que estén contenidos en la carpeta Hazards, el bucle de código conecta el manejador de eventos a todos tus peligros.
Conectar al ciclo de vida del jugador
El ciclo de vida del jugador representa eventos que ocurren cuando los jugadores interactúan en tu juego, como unirse, salir o reaparecer. Necesitas conectar manejadores a estos eventos para ejecutar lógica para cada evento principal del ciclo de vida.
Añadir manejadores de ciclo de vida a CoinServiceEn ServerScriptService, agrega el siguiente código al final del Script existente de CoinService (no reemplaces ningún código existente — añade esto después):```lualocal function onPlayerAdded(player)-- Reiniciar las monedas del jugador a 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild detendría el bucle del jugador, así que lo siguiente debe hacerse en un hilo separadotask.spawn(function()-- Cuando un jugador muerecharacter:WaitForChild("Humanoid").Died:Connect(function()-- Reiniciar las monedas del jugador a 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Inicializa cualquier jugador agregado antes de conectar al evento PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
El código define funciones para reiniciar el conteo de monedas durante los eventos de ciclo de vida apropiados:
- Players.PlayerAdded se activa cuando un jugador se une al juego y establece el conteo de monedas en 0.
- Player.CharacterAdded se activa cuando se agrega el modelo del personaje de un jugador al mundo. Ocurre después de PlayerAdded y siempre que el jugador reaparezca.
- Humanoid.Died se activa cuando un jugador muere y establece el conteo de monedas en 0. task.spawn() crea un hilo separado para manejar esto, de modo que otros aspectos del ciclo de vida del jugador puedan ejecutarse.
- Player.PlayerRemoved se activa cuando un jugador sale del juego para limpiar el estado del jugador.
- Este código contiene un posible problema donde los jugadores podrían recoger monedas antes de que se ejecute el evento Players.PlayerAdded y luego tener su conteo de monedas restablecido a cero. Para mitigar este problema, considera soluciones como la programación de código o congelar el personaje del jugador hasta que la inicialización termine. Sin embargo, estas soluciones implican conceptos de scripting más complejos que están más allá del alcance de este tutorial.
Probar
Selecciona Test del menú desplegable y haz clic en Play. Recoge algunas monedas, luego salta al agua. Tu personaje debería morir y reaparecer al inicio, con su conteo de monedas restablecido a 0.