Das Entwickeln von Fahrzeugen, Booten oder Flugzeugen in Roblox Studio verlangt tiefes Verständnis des PGS (Projected Gauss-Seidel) Solvers. Veraltete BodyMovers (BodyGyro, BodyVelocity) führen zu Ruckeln, asynchronen Kollisionen und Server-Lags.
Moderne Roblox-Physik setzt auf ein Constraint-basiertes System: SpringConstraints für realistische Federung, CylindricalConstraints für Achsen, AlignOrientation zur Verhinderung von Überschlägen und gezielte Übergabe des Network Ownerships.
1. Der PGS-Solver & Baugruppen-Architektur (Assemblies)
Wie Roblox geschweißte Teile zu starren Körpern zusammenfasst:
- Assemblies & RootPriority: Zusammenhängende Schweißbaugruppen bilden ein einzelnes Assembly. Setzen Sie
RootPriorityauf das Chassis, um die Wurzel festzulegen. - CustomPhysicalProperties: Reibung, Elastizität und Dichte abstimmen. Hohe Reifenreibung (1.5) und ein tiefer Schwerpunkt verhindern unkontrolliertes Schleudern.
- Massless-Eigenschaft: Markieren Sie Zierteile wie Spoiler oder Sitze mit
Massless = true, um die Trägheit nicht zu verfälschen.
2. Fahrzeug-Federung mit SpringConstraints
Dämpfung und Federweg optimal einstellen:
- FreeLength vs CurrentLength:
FreeLengthdefiniert die Ruhelänge der Feder für ausreichenden Hub. - Steifigkeit (Stiffness) & Dämpfung (Damping): Stiffness trägt die Fahrzeuglast; Damping unterbindet endloses Schwingen.
- Führung mit CylindricalConstraint: Kombinieren Sie jede Feder mit einem CylindricalConstraint für saubere vertikale Radführung.
3. Moderne Steuerungen: AlignOrientation & AlignPosition
Ablösung veralteter BodyMovers durch moderne Kräfte:
- Warum BodyMovers veraltet sind: Sie umgehen den Solver und führen zu inkonsistenten physikalischen Berechnungen.
- AlignOrientation gegen Überschlagen: AlignOrientation richtet Roll- und Nickachsen automatisch auf, während die Lenkung (Gieren) frei bleibt.
- Responsiveness-Feinabstimmung: Werte zwischen 15 und 30 verleihen dem Fahrzeug ein realistisches Neigungsverhalten in Kurven.
-- Dynamische Übergabe des Network Ownerships an den Fahrer
local VehicleSeat = script.Parent.VehicleSeat
local Chassis = script.Parent.Chassis
VehicleSeat:GetPropertyChangedSignal("Occupant"):Connect(function()
local occupant = VehicleSeat.Occupant
if occupant then
local character = occupant.Parent
local player = game.Players:GetPlayerFromCharacter(character)
if player then
-- Übergabe der Physikberechnung an den Fahrer
local success, err = pcall(function()
Chassis:SetNetworkOwner(player)
end)
if not success then
warn("Network Owner Fehler:", err)
end
end
else
-- Fahrer ausgestiegen: Rückgabe an den Server
task.wait(0.2)
if not VehicleSeat.Occupant then
pcall(function()
Chassis:SetNetworkOwner(nil)
end)
end
end
end)
4. Network Ownership & Physik-Latenz im Mehrspielermodus
Beseitigung von Rubberbanding bei Fahrten:
- Das Latenz-Problem: Serverbasierte Physik führt bei Ping-Zeiten zu träger Lenkung.
- SetNetworkOwner(player): Sobald ein Spieler einsteigt, überträgt
Chassis:SetNetworkOwner(player)die Berechnung an den Fahrer-Client. - Sicherheitsprüfung: Der Server sollte Geschwindigkeitswerte überwachen, um Manipulationen vorzubeugen.
5. CollisionGroups & Performance-Optimierung
Konstante 60 FPS für Physikberechnungen in vollen Servern:
- Kollisionsfilterung: Trennen Sie Chassis, Räder und Charaktere in separate Gruppen, um kuriose Unfälle zu vermeiden.
- CanTouch & CanQuery abschalten: Interne Bauteile sollten weder Touch-Events noch Raycast-Treffer auslösen.
- Physik-Schlafzustand: Übergeben Sie den Network Owner bei leerem Fahrzeug wieder an den Server (nil).
Frequently Asked Questions
Warum ruckelt mein Fahrzeug beim Fahren im Mehrspielermodus?
Weil die Physik auf dem Server berechnet wird. Verwenden Sie Chassis:SetNetworkOwner(player), damit die Eingaben lokal verzögerungsfrei verarbeitet werden.
Wie verhindere ich das Umkippen des Wagens in engen Kurven?
Bringen Sie den Schwerpunkt nach unten, nutzen Sie Massless für Deko-Teile und stabilisieren Sie das Chassis mit AlignOrientation.
Wie berechnet man das Verhältnis zwischen Stiffness und Damping?
Damping sollte etwa 10% bis 20% des Stiffness-Werts betragen, um ein Aufschaukeln der Karosserie effektiv zu verhindern.
Warum sollte man BodyVelocity und BodyGyro nicht mehr verwenden?
Sie sind veraltet und kollidieren mit dem PGS-Solver, was zu unberechenbarem Fahrzeugverhalten und FPS-Einbrüchen führt.
Was bringt der Einsatz von CollisionGroups für Fahrzeuge?
Das Deaktivieren unnötiger Kontakte zwischen Rädern, Insassen und Karosserieteilen spart pro Frame Hunderte überflüssige Physikberechnungen.