Menu
CoddyTech

Raumvorlagen

Lektion 4 von 25 im Kurs Roblox-Spiel: Entkomme der Dunkelheit von Coddy.

Hinter der Lobbytür ist noch nichts. Die Räume sind Vorlagen in ServerStorage.Rooms, jeweils ein Model mit einem unsichtbaren Entrance-Part (seinem PrimaryPart, also dem Pivot des Modells) und einem Exit-Part, an dem sich seine Tür befindet.

Einen Raum hinter einem anderen zu platzieren, ist eine Sache einer Zeile: Setze den Pivot des neuen Raums, seinen Eingang, auf den Ausgang des alten Raums:

local room = ServerStorage.Rooms.Hall:Clone()
room:PivotTo(lastRoom.Exit.CFrame)

Welche Vorlage als Nächstes kommt, steht in Settings.Order, einer Liste mit Namen. Auch die Tür eines neuen Raums benötigt setupDoor.

challenge icon

Aufgabe

Mittel

Platziere einen Raum hinter der Lobbytür.

  1. Füge die lokalen Variablen rooms = workspace.Rooms, lastRoom = rooms.Lobby, count = 0 hinzu.
  2. Schreibe addRoom(): Erhöhe count um 1, klone ServerStorage.Rooms[Settings.Order[(count - 1) % #Settings.Order + 1]] und verschiebe ihn mit lastRoom.Exit.CFrame.
  3. Setze seinen Parent auf rooms, setze lastRoom, rufe setupDoor(room.Door) auf und gib ihn zurück. Rufe zuletzt addRoom() auf.

Drücke „Spielen“ und öffne die Lobbytür: Dahinter wartet ein Flur. Klicke dann auf „Prüfen“.

Probier es selbst

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)

-- Die Nacht bricht herein: keine Sonne, überall ein wenig Licht und Nebel
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")

-- Eine Tür um ihr Scharnier aufschwingen lassen
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

-- Was eine Tür tut, wenn ein Spieler sie öffnet
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)

-- Lektion 4: Raumvorlagen kommen hierhin

-- Jeder Spieler: eine Taschenlampe für jedes Leben
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)

Alle Lektionen in Roblox-Spiel: Entkomme der Dunkelheit

Übe selbstständig: Roblox-Playground