Förderbänder
Lektion 7 von 18 im Kurs Roblox-Spiel: Endloser Turm von Coddy.
Die Förderband-Stufe hat ein dunkles Band mit dem Tag Conveyor, das dich zurück in die Richtung schiebt, aus der du gekommen bist. Ein verankertes Teil bewegt sich nie, aber wenn du ihm eine AssemblyLinearVelocity gibst, wird alles, was darauf steht, mitgetragen – wie auf einem echten Förderband.
In welche Richtung? Jedes Teil hat eine Vorderseite, und part.CFrame.LookVector ist ein Vector3, der eine Stud lang ist und aus ihr herauszeigt. Das Band wurde so gedreht, dass seine Vorderseite zurück den Gehweg hinunter zeigt:
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeedWenn die eigene Richtung des Teils verwendet wird, kann ein Ersteller das Band in eine beliebige Richtung drehen, und es funktioniert trotzdem – ohne dass das Skript geändert werden muss.
Aufgabe
MittelGib in setupStage jedem mit Conveyor markierten Teil eine AssemblyLinearVelocity, die dem CFrame.LookVector multipliziert mit Settings.BeltSpeed entspricht.
Drücke auf Play und laufe gegen das Förderband. Klicke dann auf Check.
Probier es selbst
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- Jeder Spieler erhält Wins auf der Bestenliste
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)
-- Alles mit dem Tag Kill beendet ein Leben
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Eine verschwindende Stufe wird kurz nach dem Betreten unsichtbar und erscheint dann wieder
local function makeVanish(part)
part.Touched:Connect(function(hit)
if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
return
end
part:SetAttribute("Gone", true)
task.wait(Settings.VanishDelay)
part.Transparency = 0.8
part.CanCollide = false
task.wait(Settings.VanishTime)
part.Transparency = 0
part.CanCollide = true
part:SetAttribute("Gone", nil)
end)
end
-- Spinners drehen sich in jedem Frame ein Stück
RunService.Heartbeat:Connect(function(dt)
for _, spinner in CollectionService:GetTagged("Spinner") do
if spinner:IsDescendantOf(workspace) then
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
end
end
end)
-- Aktiviere jedes Hindernis in einer Stufe anhand seiner Tags
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
if part:HasTag("Vanish") then
makeVanish(part)
end
end
end
-- Wähle eine beliebige Stufe aus
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Setze eine Kopie eines Modells auf den Turm; gibt die Kopie und die neue Oberkante zurück
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- Baue von unten nach oben einen neuen, zufälligen Turm
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
setupStage(stage)
end
stack(ServerStorage.Finish, top)
end
buildTower()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.