Menu
CoddyTech

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
end

Los 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.

challenge icon

Desafío

Intermedio

Mueve a los jugadores:

  1. Cerca de la parte superior, conserva el punto de aparición del lobby: local lobbySpawn = workspace.LobbySpawn.
  2. Escribe teleport(player, target) como en la lección.
  3. Justo después de cargar el mapa, teletransporta a todos los jugadores a map.Spawn.
  4. 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
quiz iconPonte a prueba

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