Plantillas de habitaciones
Lección 4 de 20 del curso Juego de Roblox: Escapa de la oscuridad de Coddy.
Detrás de la puerta del vestíbulo aún no hay nada. Las habitaciones son plantillas en ServerStorage.Rooms, cada una es un Model con una parte Entrance invisible (su PrimaryPart, así que es el pivote del modelo) y una parte Exit donde está su puerta.
Colocar una habitación después de otra requiere una sola línea: coloca el pivote de la nueva habitación, su entrada, en la salida de la habitación anterior:
local room = ServerStorage.Rooms.Hall:Clone()
room:PivotTo(lastRoom.Exit.CFrame)Qué plantilla viene después está indicado en Settings.Order, una lista de nombres. La puerta de una nueva habitación también necesita setupDoor.
Desafío
Intermedio- Añade
local rooms = workspace.Rooms,local lastRoom = rooms.Lobbyylocal count = 0. - Escribe
addRoom()debajo desetupDoor: suma 1 acount, clona la plantilla llamadaSettings.Order[count], colócala sobrelastRoom.Exit, asígnaleroomscomo padre, conviértela enlastRoom, configura su puerta y devuélvela. - Llama a
addRoom()una vez al final del script.
Pulsa Play y abre la puerta del vestíbulo. Después, Check.
Pruébalo tú mismo
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)
-- Cae la noche: no hay sol, hay un poco de luz por todas partes y niebla
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")
-- Abre una puerta girándola sobre su bisagra
local function openDoor(door)
door:SetAttribute("Open", true)
door.Panel.Prompt.Enabled = false
local hinge, panel = door.Hinge, door.Panel
local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()
end
-- Lo que hace una puerta cuando un jugador la abre
local function setupDoor(door)
door.Panel.Prompt.Triggered:Connect(function(player)
if door:GetAttribute("Open") then
return
end
openDoor(door)
end)
end
setupDoor(workspace.Rooms.Lobby.Door)
-- Cada jugador: una linterna en cada vida
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
local flashlight = ServerStorage.Flashlight:Clone()
flashlight.Parent = player.Backpack
local beam = flashlight.Handle.Beam
flashlight.Activated:Connect(function()
beam.Enabled = not beam.Enabled
end)
end)
end)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.