← Back to Portal Hub

Roblox कस्टम कैरेक्टर कंट्रोलर आर्किटेक्चर: फिजिक्स फोर्सेज, रेकास्ट ग्राउंडिंग और प्रोसीजरल मूवमेंट

By DopaBrain Studio Engineering Team • 2026-09-30 • Technical Guide

Roblox का डिफॉल्ट Humanoid सामान्य खेलों के लिए ठीक है, लेकिन तेज रफ्तार एक्शन और सटीक प्लेटफॉर्मिंग में कई रुकावटें पैदा करता है।

कस्टम फिजिक्स कंट्रोलर बनाकर आप कैरेक्टर की गति पर 100% नियंत्रण पा सकते हैं। VectorForce से हवा में तैरती कैप्सूल और Raycast से ढलान पर दिशा सुधारकर बेहतरीन मूवमेंट तैयार किया जा सकता है।

1. डिफॉल्ट ह्युमनॉइड की तकनीकी सीमाएं

एक्शन गेम्स में साधारण कैरेक्टर कंट्रोलर क्यों असफल होता है:

2. फ्लोटिंग कैप्सूल और VectorForce स्प्रिंग सस्पेंशन

जमीन से बिना टकराए स्मूथ चलने का तरीका:

Luau कस्टम कैरेक्टर फिजिक्स कंट्रोलर स्क्रिप्ट
--!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. रेकास्ट ग्राउंडिंग और ढलानों पर वेक्टर प्रोजेक्शन

चढ़ाई पर रफ्तार धीमी न होने देने का गणित:

4. इनर्शिया मोमेंटम और स्लाइडिंग सिस्टम

पार्कूर और तेज रफ्तार गेमप्ले की तकनीक:

5. प्रोसीजरल एनिमेशन और पैरों की ग्रिप

शारीरिक गति और 3D एनिमेशन का सही मिलान:

Frequently Asked Questions

कैप्सूल को जमीन से ऊपर क्यों तैराना चाहिए?

जमीन छूने से सूक्ष्म दरारों में अटकने की समस्या होती है, जबकि हवा में तैरने से गति बिल्कुल स्मूथ रहती है।

ढलान पर गति कैसे बरकरार रहती है?

वेक्टर प्रोजेक्शन गति को ढलान के समानांतर मोड़ देता है जिससे ऊर्जा बर्बाद नहीं होती।

क्या इससे चलती गाड़ियों पर गिरने की समस्या हल होती है?

हाँ, क्योंकि जमीन की गति को सीधे कैरेक्टर में जोड़ा जा सकता है।

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub