वॉल रनिंग, स्लाइडिंग और दीवारों पर चढ़ने जैसी तेज़ हरकतें आधुनिक गेम का मुख्य आकर्षण हैं। डिफ़ॉल्ट Humanoid पर इन्हें बनाने की कोशिश करने से कैरेक्टर दीवार पर चिपक जाता है या गिर जाता है।
आधुनिक Luau फिजिक्स कंस्ट्रेंट्स (`LinearVelocity` और `VectorForce`) को Raycast के साथ जोड़कर आप मोबाइल और कंप्यूटर दोनों पर कंसोल जैसा सहज पार्कौर गेम बना सकते हैं।
1. सहज पार्कौर के लिए Humanoid स्टेट्स को ओवरराइड करना
कस्टम मूवमेंट स्टेट मशीन के नियम:
- विरोधी स्टेट्स को बंद करना: वॉल रनिंग शुरू होते ही Climbing और Freefall को बंद करें ताकि सामान्य एनिमेशन फिजिक्स को बाधित न करें।
- नेटवर्क ओनरशिप: इनपुट लैग मिटाने के लिए सर्वर पर
rootPart:SetNetworkOwner(player)सेट करें। - स्टेट मशीन: चलने, दौड़ने, वॉल रनिंग और लटकने के लिए अलग-अलग फंक्शन्स बनाएं।
2. डायरेक्शनल Raycast और दीवार की दिशा का संरेखण
दीवार का पता लगाने और दौड़ने की दिशा की गणना:
- साइड Raycast: कमर और कंधों से अगल-बगल 3.5 स्टड की दूरी पर लेज़र किरणें भेजकर दीवार की पहचान करें।
- दीवार का कोण: जांचें कि सतह 75° से 105° तक खड़ी हो ताकि ढलानों पर कैरेक्टर न दौड़े।
- क्रॉस प्रोडक्ट से दिशा: दीवार के समानांतर दौड़ने की दिशा के लिए
wallNormal:Cross(Vector3.yAxis)का उपयोग करें।
3. आधुनिक फिजिक्स कंस्ट्रेंट्स: LinearVelocity और VectorForce
पुराने BodyMovers के स्थान पर नए टूल्स का उपयोग:
- LinearVelocity से स्थिर गति: दीवार के घर्षण के बावजूद खिलाड़ी को लगातार आगे बढ़ाता रहता है।
- VectorForce से गुरुत्वाकर्षण का संतुलन: दुनिया के गुरुत्वाकर्षण (196.2 studs/s²) को शून्य करने के लिए ऊपर की ओर बल लगाएं।
- धीमी गिरावट: 1.5–2 सेकंड के बाद ऊपर के बल को धीरे-धीरे घटाएं ताकि खिलाड़ी स्वाभाविक रूप से नीचे गिरे।
-- क्लाइंट साइड वॉल रनिंग फिजिक्स कंट्रोलर
local RunService = game:GetService("RunService")
local WallRun = {}
WallRun.__index = WallRun
function WallRun.new(character)
local self = setmetatable({}, WallRun)
self.Char = character
self.RootPart = character:WaitForChild("HumanoidRootPart")
self.Humanoid = character:WaitForChild("Humanoid")
local att = Instance.new("Attachment", self.RootPart)
local lv = Instance.new("LinearVelocity")
lv.Attachment0 = att
lv.MaxForce = 15000
lv.RelativeTo = Enum.ActuatorRelativeTo.World
lv.Enabled = false
lv.Parent = self.RootPart
self.Attachment = att
self.LinearVelocity = lv
self.IsRunning = false
return self
end
function WallRun:CheckWall(side)
local rightVec = self.RootPart.CFrame.RightVector
local rayDir = (side == "Left" and -rightVec or rightVec) * 3.5
local params = RaycastParams.new()
params.FilterDescendantsInstances = {self.Char}
params.FilterType = Enum.RaycastFilterType.Exclude
return workspace:Raycast(self.RootPart.Position, rayDir, params)
end
function WallRun:Start(hitNormal, forwardDir)
self.IsRunning = true
self.LinearVelocity.VectorVelocity = forwardDir * 32 + Vector3.new(0, 4, 0)
self.LinearVelocity.Enabled = true
self.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
end
function WallRun:Stop()
self.IsRunning = false
self.LinearVelocity.Enabled = false
self.Humanoid:ChangeState(Enum.HumanoidStateType.Freefall)
end
return WallRun
4. किनारा पकड़ना (Ledge Grab) और ऊपर चढ़ना
किनारों को पहचानना और ऊपर चढ़ने की प्रक्रिया:
- दो-स्तरीय Raycast: सीने की ऊंचाई पर दीवार की पहचान और ऊपर से नीचे की ओर सटीक किनारे की ऊंचाई का पता लगाएं।
- AlignPosition से स्थिति लॉक करना: किनारा पकड़ते ही कैरेक्टर को वहां स्थिर कर दें।
- बेज़ियर कर्व से ऊपर चढ़ना: कूदने पर कैरेक्टर को बिना झटके के ऊपर खींचें।
5. मोबाइल टच कंट्रोल्स और सर्वर सुरक्षा
स्मार्टफोन पर आसान नियंत्रण और चीटिंग की रोकथाम:
- बड़े टच बटन: वॉल जंप के लिए स्क्रीन पर कम से कम 48x48 पिक्सल के स्पष्ट बटन बनाएं।
- सर्वर स्पीड चेक: सर्वर लगातार दूरी की जांच करता है ताकि कोई उड़ने या टेलीपोर्ट करने का चीट न कर सके।
- दीवार की मौजूदगी की जांच: सर्वर खुद जांचता है कि क्या सच में खिलाड़ी के पास कोई दीवार मौजूद थी।
Frequently Asked Questions
BodyVelocity के बजाय LinearVelocity का उपयोग क्यों करना चाहिए?
BodyVelocity पुराना और अप्रचलित हो चुका है। LinearVelocity आधुनिक रोब्लॉक्स इंजन का हिस्सा है और अधिक स्थिर है।
वॉल रन के दौरान नीचे फिसलने से कैसे बचें?
VectorForce का उपयोग करके गुरुत्वाकर्षण के बराबर ऊपर की ओर बल लगाकर।
दीवार के समानांतर दौड़ने की दिशा कैसे तय होती है?
दीवार के सामान्य वेक्टर (Normal) और दुनिया के ऊपर वाले वेक्टर के क्रॉस प्रोडक्ट द्वारा।
सर्वर पर उड़ने वाले चीट्स को कैसे रोका जाता है?
सर्वर खुद दीवार की दूरी और खिलाड़ी की गति सीमा की स्वतंत्र रूप से पुष्टि करता है।