Roblox का डिफॉल्ट Humanoid सामान्य खेलों के लिए ठीक है, लेकिन तेज रफ्तार एक्शन और सटीक प्लेटफॉर्मिंग में कई रुकावटें पैदा करता है।
कस्टम फिजिक्स कंट्रोलर बनाकर आप कैरेक्टर की गति पर 100% नियंत्रण पा सकते हैं। VectorForce से हवा में तैरती कैप्सूल और Raycast से ढलान पर दिशा सुधारकर बेहतरीन मूवमेंट तैयार किया जा सकता है।
1. डिफॉल्ट ह्युमनॉइड की तकनीकी सीमाएं
एक्शन गेम्स में साधारण कैरेक्टर कंट्रोलर क्यों असफल होता है:
- सीमित स्टेट मशीन: तेज मोड़ों पर अवांछित रुकावटें।
- प्लेटफॉर्म पर झटके: चलती गाड़ियों या लिफ्ट पर कैरेक्टर का दूर फिंकना।
- सीढ़ियों पर कंपन: अचानक ऊंचाई बदलने से कैमरे का हिलना।
- सटीक नियंत्रण: Heartbeat पर सीधे गणितीय गति तय करना।
2. फ्लोटिंग कैप्सूल और VectorForce स्प्रिंग सस्पेंशन
जमीन से बिना टकराए स्मूथ चलने का तरीका:
- वर्चुअल स्प्रिंग: नीचे रेकास्ट फेंककर कैरेक्टर को जमीन से हल्का ऊपर उठाना।
- घर्षण रहित कैप्सूल: किनारों पर अटकने से बचाने के लिए शून्य घर्षण।
- सीधे खड़े रहने का नियम: AlignOrientation से कैरेक्टर को सीधा रखना।
- LinearVelocity का उपयोग: बिना रुके तुरंत गति बदलना।
--!strict
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local CustomController = {}
local player = Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart") :: BasePart
local TARGET_HEIGHT = 4.2
local SPRING_STIFFNESS = 1800
local SPRING_DAMPING = 160
local WALK_SPEED = 24
local RAY_PARAMS = RaycastParams.new()
RAY_PARAMS.FilterType = RaycastFilterType.Exclude
local linearVelocity = Instance.new("LinearVelocity")
linearVelocity.MaxForce = 40000
linearVelocity.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector
linearVelocity.RelativeTo = Enum.ActuatorRelativeTo.World
local attachment = Instance.new("Attachment")
attachment.Parent = hrp
linearVelocity.Attachment0 = attachment
linearVelocity.Parent = hrp
function CustomController.Update(dt: number)
local moveDir = Vector3.zero
local cam = Workspace.CurrentCamera
if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir += cam.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir -= cam.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir += cam.CFrame.RightVector end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir -= cam.CFrame.RightVector end
moveDir = Vector3.new(moveDir.X, 0, moveDir.Z)
if moveDir.Magnitude > 0.01 then moveDir = moveDir.Unit end
RAY_PARAMS.FilterDescendantsInstances = { char }
local ray = Workspace:Raycast(hrp.Position, Vector3.new(0, -TARGET_HEIGHT * 1.5, 0), RAY_PARAMS)
local vForce = 0
local targetVel = moveDir * WALK_SPEED
if ray and ray.Instance and ray.Instance.CanCollide then
local dist = (hrp.Position - ray.Position).Magnitude
targetVel = moveDir - (ray.Normal * moveDir:Dot(ray.Normal))
targetVel = targetVel.Unit * WALK_SPEED
local err = TARGET_HEIGHT - dist
vForce = (err * SPRING_STIFFNESS) - (hrp.AssemblyLinearVelocity.Y * SPRING_DAMPING)
end
linearVelocity.VectorVelocity = Vector3.new(targetVel.X, targetVel.Y + (vForce * dt), targetVel.Z)
end
RunService.Heartbeat:Connect(CustomController.Update)
return CustomController
3. रेकास्ट ग्राउंडिंग और ढलानों पर वेक्टर प्रोजेक्शन
चढ़ाई पर रफ्तार धीमी न होने देने का गणित:
- सतह का नॉर्मल वेक्टर: जमीन की ढलान की सही दिशा पहचानना।
- वेक्टर प्रोजेक्शन: गति को जमीन के समानांतर मोड़ना।
- अधिकतम ढलान सीमा: 45 डिग्री से ज्यादा होने पर नीचे फिसलना।
- खाई की पहचान: किनारों पर पहले से खतरे को भांपना।
4. इनर्शिया मोमेंटम और स्लाइडिंग सिस्टम
पार्कूर और तेज रफ्तार गेमप्ले की तकनीक:
- स्लाइडिंग: दौड़ते समय बैठने पर घर्षण कम करके आगे फिसलना।
- ढलान का फायदा: नीचे फिसलते समय गति में स्वाभाविक बढ़त।
- मोमेंटम बनाए रखना: फिसलने के बाद गति को तुरंत न खोना।
- हवा में नियंत्रण: कूदने पर हवा में दिशा बदलने की सुविधा।
5. प्रोसीजरल एनिमेशन और पैरों की ग्रिप
शारीरिक गति और 3D एनिमेशन का सही मिलान:
- पैरों का फिसलना रोकना: एनिमेशन की गति को वास्तविक गति से मिलाना।
- 8-दिशाओं का तालमेल: हर दिशा में स्मूथ एनिमेशन ब्लेंडिंग।
- IKControl: ऊबड़-खाबड़ जमीन पर पैरों को सही से टिकाना।
- लोकल प्रोसेसिंग: फोन पर ही गणनाएं पूरी करके लैग रोकना।
Frequently Asked Questions
कैप्सूल को जमीन से ऊपर क्यों तैराना चाहिए?
जमीन छूने से सूक्ष्म दरारों में अटकने की समस्या होती है, जबकि हवा में तैरने से गति बिल्कुल स्मूथ रहती है।
ढलान पर गति कैसे बरकरार रहती है?
वेक्टर प्रोजेक्शन गति को ढलान के समानांतर मोड़ देता है जिससे ऊर्जा बर्बाद नहीं होती।
क्या इससे चलती गाड़ियों पर गिरने की समस्या हल होती है?
हाँ, क्योंकि जमीन की गति को सीधे कैरेक्टर में जोड़ा जा सकता है।