Concevoir des véhicules réactifs et fiables dans Roblox Studio nécessite de comprendre le solveur PGS (Projected Gauss-Seidel). L'utilisation des anciens BodyMovers génère des saccades et des collisions chaotiques.
La physique moderne s'appuie sur les contraintes: SpringConstraints pour la suspension, CylindricalConstraints pour les roues, AlignOrientation pour redresser le châssis et Network Ownership pour une réactivité instantanée.
1. Le Solveur PGS & Bâtiment d'Assemblages (Assemblies)
Principes de regroupement des pièces soudées:
- Assemblies & RootPriority: Les pièces soudées forment un Assembly unique. Réglez
RootPrioritysur le châssis. - CustomPhysicalProperties: Friction élevée pour les pneus (1.5) et faible densité du châssis pour la stabilité.
- Propriété Massless: Marquez les accessoires décoratifs en
Massless = truepour préserver le centre de gravité.
2. Réglage de Suspension avec SpringConstraints
Absorption optimale des chocs sur tous terrains:
- FreeLength vs CurrentLength:
FreeLengthdéfinit la hauteur de repos de l'amortisseur. - Stiffness & Damping: La rigidité soutient le poids tandis que l'amortissement stoppe les rebonds infinis.
- Guidage par CylindricalConstraint: Force la roue à voyager strictement sur l'axe vertical sans vacillement.
3. Contrôles Modernes: AlignOrientation & AlignPosition
Remplacer les anciens BodyMovers obsolètes:
- Obsolescence des BodyMovers: Conflits avec le solveur PGS et micro-saccades physiques.
- AlignOrientation Antiroulis: Maintient l'assiette du véhicule tout en laissant la direction libre.
- Responsiveness: Un réglage de 15 à 30 procure une inclinaison réaliste en virage.
-- Délégation Dynamique du Network Ownership au Conducteur
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
-- Délègue la simulation physique au client du conducteur
local success, err = pcall(function()
Chassis:SetNetworkOwner(player)
end)
if not success then
warn("Échec du Network Owner:", err)
end
end
else
-- Le conducteur sort : restitution au serveur
task.wait(0.2)
if not VehicleSeat.Occupant then
pcall(function()
Chassis:SetNetworkOwner(nil)
end)
end
end
end)
4. Network Ownership & Latence Multijoueur
Supprimer les saccades au volant:
- Latence de Réseau: Le calcul sur le serveur produit un décalage désagréable entre l'action et la réaction.
- SetNetworkOwner(player): Confiez la simulation physique au pilote à bord pour du 60 FPS immédiat.
- Surveillance Serveur: Vérifiez les vitesses anormales pour prévenir les abus de triche.
5. CollisionGroups & Optimisation des Ticks Physiques
Assurer une fluidité absolue sur les gros serveurs:
- Filtrage CollisionGroups: Isolez les roues et les piétons pour éviter les éjections inattendues.
- Désactiver CanTouch/CanQuery: Allégez le moteur en désactivant ces options sur les pièces internes.
- Mise en Veille Physique: Restituez le Network Ownership au serveur quand le véhicule est vide.
Frequently Asked Questions
Pourquoi les véhicules saccadent-ils en multijugateur ?
Parce que le serveur calcule la physique. Déléguez la simulation au conducteur avec Chassis:SetNetworkOwner(player).
Comment empêcher mon véhicule de se retourner en virage ?
Baissez le centre de masse avec Massless et intégrez un AlignOrientation pour stabiliser le roulis.
Quel ratio appliquer entre Stiffness et Damping ?
Réglez Damping entre 10% et 20% de la valeur de Stiffness pour stopper les oscillations sans durcir la suspension.
Pourquoi bannir BodyVelocity et BodyGyro des nouveaux jeux ?
Ils sont obsolètes et interfèrent avec le moteur PGS moderne. Utilisez AlignOrientation ou LinearVelocity.
Quel est le bénéfice des CollisionGroups sur les véhicules ?
Ils éliminent les détections de collision superflues entre pièces internes et personnages, soulageant le processeur.