Teletransportar jugadores
Lección 6 de 18 del curso Juego de Roblox: Supervivencia ante desastres de Coddy.
Una isla en la que nadie aparece no es un juego. Cuando empieza una ronda, cada jugador va al Spawn del mapa y, cuando termina, vuelve al vestíbulo.
Players:GetPlayers() enumera a todos los que están en el juego, y el cuerpo de un jugador es player.Character, un Model. Model:PivotTo(cframe) mueve todo un modelo de una vez, manteniendo cada parte en su lugar. Un CFrame es una posición más una rotación, y sumarle un Vector3 lo desplaza:
local function teleport(player, target)
local character = player.Character
if character then
character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
end
endLos 4 studs hacia arriba hacen que el jugador aparezca un poco por encima del objetivo, en lugar de dentro de él. player.Character es nil durante un momento después de unirse o morir; de ahí el if.
Desafío
IntermedioMueve a los jugadores:
- Cerca de la parte superior, conserva el punto de aparición del lobby:
local lobbySpawn = workspace.LobbySpawn. - Escribe
teleport(player, target)como en la lección. - Justo después de cargar el mapa, teletransporta a todos los jugadores a
map.Spawn. - Cuando termine la cuenta regresiva de la ronda, teletransporta a todos los jugadores a
lobbySpawn, antes de destruir el mapa.
Pulsa Jugar y acompáñalos; después, pulsa Comprobar.
Pruébalo tú mismo
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
print("Rounds last " .. Settings.RoundLength .. " seconds")
-- Cada jugador recibe Wins en la tabla de clasificación
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- El panel de estado en la sala de espera
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard
local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui
local function setStatus(text)
status.Text = text
end
-- El bucle de rondas
while true do
for seconds = Settings.Intermission, 1, -1 do
setStatus("Intermission: " .. seconds)
task.wait(1)
end
local map = ServerStorage.Maps.Island:Clone()
map.Name = "Map"
map.Parent = workspace
for seconds = Settings.RoundLength, 1, -1 do
setStatus("Time left: " .. seconds)
task.wait(1)
end
map:Destroy()
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Juego de Roblox: Supervivencia ante desastres
2Mapas y jugadores
Cargar un mapa