Roblox Studio में बेहतरीन वाहन बनाने के लिए इंजन के PGS (Projected Gauss-Seidel) सॉल्वर को समझना आवश्यक है। पुराने BodyMovers पर निर्भर रहने से मल्टीप्लेयर में वाहन झटके लेते हैं और अनियंत्रित हो जाते हैं।
आधुनिक Roblox भौतिकी बाधाओं (Constraints) पर आधारित है: झटकों को सोखने के लिए SpringConstraints, पहियों के लिए CylindricalConstraints, पलटने से बचाने के लिए AlignOrientation और नेटवर्क स्वामित्व का संयोजन।
1. PGS भौतिकी सॉल्वर और असेंबली संरचना
वेल्ड किए गए पुर्जे कैसे एक ठोस भौतिक निकाय बनते हैं:
- असेंबली और RootPriority: वेल्डेड पार्ट्स एक एकल असेंबली बनाते हैं। चेसिस पर
RootPriorityसेट करें ताकि रूट पार्ट स्थिर रहे। - CustomPhysicalProperties: पहियों का घर्षण (1.5) बढ़ाकर और चेसिस का गुरुत्वाकर्षण केंद्र नीचे रखकर फिसलने से रोकें।
- Massless ध्वज: सजावटी पुर्जों को
Massless = trueसेट करें ताकि वे संतुलन न बिगाड़ें।
2. SpringConstraints के साथ सस्पेंशन ट्यूनिंग
सभी प्रकार के रास्तों पर झटकों से सुरक्षा:
- FreeLength और गतिविधि दायरा:
FreeLengthस्प्रिंग की प्राकृतिक लंबाई तय करता है। - कठोरता (Stiffness) और अवमंदन (Damping): Stiffness वजन उठाती है और Damping लगातार उछलने से रोकती है।
- CylindricalConstraint जोड़ना: पहियों को केवल लंबवत दिशा में हिलने के लिए बाध्य करता है।
3. आधुनिक चालक: AlignOrientation और AlignPosition
पुराने BodyMovers की जगह नए कंस्ट्रेंट्स:
- पुराने BodyMovers की समस्या: वे PGS सॉल्वर से टकराते हैं और भौतिकी में रुकावट पैदा करते हैं।
- AlignOrientation सुरक्षा: वाहन पलटने पर उसे स्वतः सीधा करता है और स्टीयरिंग को मुक्त रखता है।
- Responsiveness ट्यूनिंग: 15–30 का मान मोड़ों पर वाहन को यथार्थवादी झुकाव देता है।
-- चालक को नेटवर्क स्वामित्व सौंपने की स्क्रिप्ट
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
-- भौतिकी गणना तुरंत चालक को सौंपें
local success, err = pcall(function()
Chassis:SetNetworkOwner(player)
end)
if not success then
warn("नेटवर्क स्वामित्व त्रुटि:", err)
end
end
else
-- चालक के उतरने पर सर्वर को वापस दें
task.wait(0.2)
if not VehicleSeat.Occupant then
pcall(function()
Chassis:SetNetworkOwner(nil)
end)
end
end
end)
4. नेटवर्क ओनरशिप और मल्टीप्लेयर भौतिकी लैग
ड्राइविंग के दौरान रबरबैंडिंग और झटकों को खत्म करना:
- पिंग लैग समस्या: सर्वर पर भौतिकी चलने से स्टीयरिंग में देरी होती है।
- SetNetworkOwner(player): चालक के बैठते ही
Chassis:SetNetworkOwner(player)कॉल करके स्थानीय 60 FPS सिमुलेशन चालू करें। - सर्वर सुरक्षा: असामान्य गति और टेलीपोर्टेशन की निगरानी सर्वर पर करें।
5. CollisionGroups और भौतिकी प्रदर्शन सुधार
भरे हुए सर्वरों में भी 60 FPS बनाए रखना:
- टकराव समूहों का उपयोग: पहियों और पैदल यात्रियों के टकराव को बंद करें ताकि कार हवा में न उड़े।
- CanTouch/CanQuery बंद करना: आंतरिक यांत्रिक भागों पर इन्हें बंद करके गणना का बोझ घटाएँ।
- स्लीप स्टेट (Sleep): वाहन खाली होने पर स्वामित्व वापस सर्वर (nil) को लौटा दें।
Frequently Asked Questions
मल्टीप्लेयर में गाड़ी चलाते समय झटके क्यों लगते हैं?
क्योंकि भौतिकी सर्वर पर चल रही होती है। Chassis:SetNetworkOwner(player) का उपयोग करके चालक के फोन या पीसी पर स्थानीय गणना कराएँ।
मोड़ पर गाड़ी पलटने से कैसे रोकें?
ऊपरी पुर्जों को Massless बनाकर गुरुत्वाकर्षण केंद्र नीचे करें और AlignOrientation का उपयोग करें।
Stiffness और Damping का सही अनुपात क्या है?
Damping को Stiffness का 10% से 20% सेट करना चाहिए ताकि स्प्रिंग अत्यधिक न उछले।
BodyVelocity और BodyGyro का उपयोग क्यों बंद करना चाहिए?
वे पुराने हो चुके हैं और नए PGS सॉल्वर में लैग पैदा करते हैं। AlignOrientation का प्रयोग करें।
CollisionGroups वाहन के प्रदर्शन में कैसे मदद करते हैं?
पहियों और आंतरिक पुर्जों के बीच अनावश्यक टकराव गणनाओं को हटाकर सीपीयू का भार कम करते हैं।